【问题标题】:Blob gets saved as damaged imageBlob 被保存为损坏的图像
【发布时间】:2016-08-30 18:05:09
【问题描述】:

所以在我的 jQuery 中,我使用 FormData API 将一些数据发布到 Laravel 控制器。 blob 本身取自cropper 插件,代码本身如下所示:

image_cropper.cropper('getCroppedCanvas').toBlob(function (blob) {
          var formData = new FormData();

          formData.append('image_url', blob);
          console.log(formData.get('image_url'));
          $.ajax({
              url: "{{action('Admin\AdminDashboardController@postCreateEdit')}}",
              data: formData,
              processData: false,
              contentType: false,
              type: 'POST',
              success: function(data){
                $('#carCreateEditModal').modal('close');
              }
            });
        });

控制台日志打印出这个对象:

lastModified
:
1472579954758
lastModifiedDate
:
Tue Aug 30 2016 20:59:14 GMT+0300 (FLE Daylight Time)
name
:
"blob"
size
:
525372
type
:
"image/png"
webkitRelativePath
:
""
__proto__
:
File

当我检查表单数据在我的控制器中是否有文件时,据说该文件存在,然后我只是将它放入文件夹中:

if($this->request->hasFile('image_url')!=''){
            $image = $this->request->file('image_url');
            file_put_contents(storage_path().'/'.$time.'.'.$image->extension(), $image);
        }

保存的文件具有 png 扩展名,大小为 1 KB,任何文件浏览器都无法打开。手动更改扩展没有帮助。

问题出在我的代码中还是与插件有关?

【问题讨论】:

    标签: php jquery laravel crop form-data


    【解决方案1】:

    您可以使用\Symfony\Component\HttpFoundation\File\UploadedFile::move 代替file_put_contents。请看下面的代码:

    $image->move(storage_path(), $time.'.'.$image->extension());
    

    【讨论】:

    • 我收到错误 500:文件“C:\laragon\tmp\phpD0EC.tmp”不存在
    【解决方案2】:

    嗯,我不知道为什么,但它在控制器中按以下方式工作:

    $file = file_get_contents($image);
    file_put_contents($path, $file);
    

    【讨论】:

      猜你喜欢
      • 2015-07-30
      • 2023-03-19
      • 2017-01-27
      • 1970-01-01
      • 2014-12-27
      • 2021-08-01
      • 1970-01-01
      • 2018-05-05
      • 2014-12-21
      相关资源
      最近更新 更多