所以在我的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,并且无法由任何文件资源管理器打开。手动更改扩展名无济于事。
问题出在我的代码中,或者是关于插件的问题?
答案 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);