Laravel 5.6使用Intervention包上传文件遇tmp编码格式不支持错误
解决Laravel 5.6中Intervention Image的"Encoding format (tmp) is not supported"错误
这个错误我之前碰到过,本质是你没有正确把上传的文件实例传给Intervention Image,反而误传了临时文件路径或者错误的参数类型,导致它识别不了文件格式。下面给你几个针对性的修复步骤:
1. 正确传递上传文件实例
别直接用$request->image的路径,直接把文件实例传给Image::make()就行。调整后的代码应该是这样:
public function store(Request $request) { $this->validate($request, [ 'name' => 'required|unique:categories', 'description' => 'max:355', 'image' => 'required|image|mimes:jpeg,bmp,png,jpg' ]); // 获取上传的文件实例(关键!) $uploadedImage = $request->file('image'); // 用文件实例初始化Intervention $image = Image::make($uploadedImage); // 这里可以加你需要的处理,比如调整尺寸 $image->resize(400, 300)->encode('jpg'); // 生成文件名并保存到指定目录 $fileName = uniqid() . '.' . $uploadedImage->getClientOriginalExtension(); $image->save(public_path('uploads/categories/' . $fileName)); // 后续把文件名存到数据库等操作... }
2. 避免误用临时文件路径
如果你之前写过类似Image::make($request->image->getPathname())的代码,赶紧改了——getPathname()返回的是系统临时文件的路径,Intervention没法正确识别它的编码格式,才会抛出tmp不支持的错误。
3. 确认Intervention驱动配置
既然你已经启用了gd2扩展,去config/image.php里确认驱动是gd:
'driver' => 'gd',
要是之前配置的是imagick,而你没装这个扩展,也可能引发类似问题,不过你已经启用gd2,这一步主要是兜底检查。
4. 顺便检查存储目录权限
虽然这不是直接导致tmp错误的原因,但还是要确保你要保存图片的目录(比如public/uploads/categories)有读写权限,避免后续保存时出其他幺蛾子。
核心问题就是别传临时路径,直接传上传文件实例,这样Intervention就能正确识别图片格式了,应该能解决你的问题。
内容的提问来源于stack exchange,提问作者Debjit Roy
相关产品推荐
相关产品推荐

