Laravel 8 上传jpeg格式图片时mimes验证规则报错问题求解
Laravel 8 上传jpeg图片验证报错解决方案
- 调整验证规则
你当前的验证规则存在两点优化空间:- 非必填字段要加
nullable规则,避免空值触发不必要的验证逻辑 - jpeg格式对应的常见后缀有
jpeg和jpg两种,只写jpeg会导致后缀为jpg的正常jpeg文件验证失败
调整后的验证规则如下:
- 非必填字段要加
'photo' => 'nullable|image|mimes:jpeg,jpg|min:1|max:2000',
如果还是验证失败,可以改用mimetypes规则直接匹配文件的实际MIME类型,准确性更高:
'photo' => 'nullable|image|mimetypes:image/jpeg|min:1|max:2000',
确认PHP的fileinfo扩展已开启
Laravel的文件MIME类型验证完全依赖PHP的fileinfo扩展,如果扩展未开启,系统无法正确识别上传文件的实际格式,就会出现符合要求的文件也验证失败的问题。你可以通过phpinfo()查看扩展是否已开启,未开启的话需要修改php.ini配置开启扩展后重启服务。修正上传文件的存储逻辑
你当前代码直接将请求中的$data["photo"]写入数据库是错误的:上传的文件在请求中是Illuminate\Http\UploadedFile对象,不能直接存入数据库字段,需要先将文件存储到服务器的指定目录,再将文件路径存入数据库。示例代码如下:
if($request->hasFile('photo')){ // 存储文件到storage/app/public/quality目录下,返回存储路径 $photoPath = $request->file('photo')->store('quality', 'public'); $report->photo = $photoPath; } else { $report->photo = null; }
存储完成后需要执行php artisan storage:link命令创建软链接,才能在前端通过公共路径访问上传的图片。
内容的提问来源于stack exchange,提问作者thisdanguy
相关产品推荐
相关产品推荐

