Blob被保存为损坏的图像

时间:2016-08-30 18:05:10

标签: php jquery laravel crop form-data

所以在我的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

当我检查formdata是否在我的控制器中有文件时,表示该文件存在,然后我只是将其放入文件夹:

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

保存的文件具有png扩展名,大小为1 KB,并且无法由任何文件资源管理器打开。手动更改扩展名无济于事。

问题出在我的代码中,或者是关于插件的问题?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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