如何在Laravel 5中通过干预图像上传大尺寸图像

时间:2017-08-17 13:24:13

标签: laravel laravel-5 intervention

我在我的项目中使用Image Intervention

我的应用程序在上传小尺寸图像时运行顺畅。但是当我尝试上传大尺寸图像(> 2mb)时,我的应用程序停止工作!

即使它没有显示正确的错误。有时会显示Token mismatch错误&有时网址不会重定向。

如何解决?我不知道。

这是我的代码:

$post->new Post();

if($request->hasFile('image')){
    $image=$request->file('image');
    $filename=Auth::user()->id.'_'.time().'.'.$image->getClientOriginalExtension();
    $location=public_path('images/'.$filename);
    Image::make($image)->save($location);

    $post->image=$filename;
}

$post->save();

我正在使用Image intervention上传图片。但你也可以建议替代它。

谢谢!

2 个答案:

答案 0 :(得分:3)

实际上这是服务器端将变量值设置为php.ini文件的问题。如果您上传的服务器的post_max_size设置越多,输入将为空,您将收到令牌不匹配错误。

根据您的需要更改upload_max_filesizepost_max_size值,然后重新启动服务器。

答案 1 :(得分:0)

事实证明这是一个内存问题。如果您检查错误日志,则会看到服务器内存不足。你会看到像

这样的东西
PHP Fatal error:  Allowed memory size of XXXXXXXX bytes exhausted (tried to allocate XXXXX bytes) in ...

因为干预图像逐像素地读取整个图像,将数据保存在内存中,看似像2MB这样的小图像最终可能需要几十MB的内存来处理。

您可能需要将内存限制设置为可用的最高内存并在打开文件之前检查文件大小,因为没有错误消息的站点令人尴尬。使用像

这样的东西
if( $request->hasFile('image') && $request->file('image')->getClientSize() < 2097152 ){
    $image=$request->file('image');
    $filename=Auth::user()->id.'_'.time().'.'.$image->getClientOriginalExtension();
    $location=public_path('images/'.$filename);
    Image::make($image)->save($location);

    $post->image=$filename;
}