Laravel 5.4:如何验证图像大小?

Posted

技术标签:

【中文标题】Laravel 5.4:如何验证图像大小?【英文标题】:Laravel 5.4: How do I validate an image size? 【发布时间】:2018-12-22 09:05:06 【问题描述】:

我有一个用户可以提交图像的表单。我不想将它存储在我的服务器上以防它是病毒,而是将它存储到 Amazon S3。

我的问题是我需要验证图像是否小于特定尺寸。 我如何在 Laravel 5.4 中做到这一点?

我的控制器

 $validator = \Validator::make($request->all(),[
    "logo"      => "dimensions:max_width:300,max_height:200",
 ]);

 if($validator->fails())
    return \Redirect::back()->withInput()->withErrors( $validator );
 

验证失败并重定向回“徽标的图像尺寸无效”。尽管我上传的图片是 100x100。 什么是验证的正确方法或无需保存文件的替代解决方案?

【问题讨论】:

你确定你的表单是method=POST并且有enctype="multipart/form-data"属性,并且“logo”字段是文件输入吗? 您是否在验证到达之前保存了文件? 【参考方案1】:

max_width & max_height 中使用等号 (=) 而不是冒号 (:):

"logo"  => "dimensions:max_width=300,max_height=200",

Image dimension validation rules in Laravel


如果没有解决,请确保您的表单有enctype="multipart/form-data"(如@F.Igor 的评论中所述):

<form method="POST" enctype="multipart/form-data">
    <input type="file" name="logo">
    <input type="submit">
</form>

如果您已经在使用它,请检查(在验证之前)您是否通过您的请求获取图像以及使用什么名称:

dd($request->all())

【讨论】:

感谢它缺少 enctype。冒号实际上仍然有效。【参考方案2】:

这是一个验证示例:

图像格式 最大文件大小 尺寸
$request->validate([
     'avatar' => ['image','mimes:jpg,png,jpeg,gif','max:200','dimensions:min_width=100,min_height=100,max_width500,max_height=500'],
]);

max:200(最大大小限制为 200kb)

【讨论】:

以上是关于Laravel 5.4:如何验证图像大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何验证 Laravel 5.4 单选按钮?

Laravel 5.4 表单请求唯一验证:如何访问 id?

Laravel 5.4 |如何使用引导文件输入上传图像?

如何在移动应用程序的 Web 服务中使用 Laravel 5.4 验证器

Laravel 5.5 - 图像验证不起作用

laravel 5.4 中的 API 验证