使用 Laravel 验证上传的图像或视频
Laravel  /  管理员 发布于 3年前   1130
Laravel 的 Validator 使使用“图像”规则将请求的文件字段验证为图像变得简单,您可以通过限制 MIME 类型来组合验证视频的规则。
$request->validate([
'image_upload' => 'image|max:1024',
'video_upload' => 'mimetypes:video/avi,video/mpeg,video/quicktime|max:102400']);
但是,
如果您有一个上传字段应该接受最多 10 兆字节的视频,或者接受不超过 1 兆字节的图像,
会发生什么情况?
这对于 Laravel 的 Validator 来说更加棘手:
使用 Laravel 的内置验证规则似乎没有一个优雅的解决方案。
幸运的是,
Laravel 允许我们创建自己的自定义验证规则。
我们可以创建一个自定义规则闭包来检查上传的是图像还是视频,然后根据上传类型验证规则。
$request->validate([
'file', // Confirm the upload is a file before checking its type.
function ($attribute, $value, $fail) {
$is_image = Validator::make(
['upload' => $value],
['upload' => 'image']
)->passes();
$is_video = Validator::make(
['upload' => $value],
['upload' => 'mimetypes:video/avi,video/mpeg,video/quicktime']
)->passes();
if (!$is_video && !$is_image) {
$fail(':attribute must be image or video.');
}
if ($is_video) {
$validator = Validator::make(
['video' => $value],
['video' => "max:102400"]
);
if ($validator->fails()) {
$fail(":attribute must be 10 megabytes or less.");
}
}
if ($is_image) {
$validator = Validator::make(
['image' => $value],
['image' => "max:1024"]
);
if ($validator->fails()) {
$fail(":attribute must be one megabyte or less.");
}
}
}]);
我会第一个承认:这段代码看起来很不雅观。
但它有效,并且闭包利用了现有的验证器规则,如“图像”和“最大”。
如果您更喜欢面向对象的方法,则可以将此代码提取到自定义规则对象,并且可能提取 is_video() 和 is_image() 的方法。
您甚至可以在 Rule 对象的构造函数中配置最大上传大小
如果您在自己的项目中遇到这个特殊挑战,希望这篇文章可以为您节省一些时间。
另外,如果您知道更优雅的实现方式,请发表评论!
转:
https://dev.to/tylerlwsmith/validating-an-upload-as-an-image-or-a-video-with-laravel-2k5l
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号