php - Laravel 验证文件数组总允许上传大小

标签 php laravel validation file-upload filesize

我的 View 有一个文件输入数组,如

<input type="file" name="videos[]" />
<input type="file" name="videos[]" />
...
...

我想验证允许的总上传大小(例如:总允许上传限制为 3Mb)。我已经写了验证
$validatedData = $request->validate([
     'videos.*' => 'present|file|mimetypes:video/mp4,video/ogg|max:3000',
]);

但这验证了每个视频的 3Mb。

我试过了
$validatedData = $request->validate([
    'videos' => 'file|max:3000',
    'videos.*' => 'present|file|mimetypes:video/mp4,video/ogg|max:3000',
]);

/*------------------------------------------------*/

$validatedData = $request->validate([
    'videos' => 'array|max:3000',
    'videos.*' => 'present|file|mimetypes:video/mp4,video/ogg|max:3000',
]);

但验证不适用于大于 3Mb 的总上传大小。我是否必须编写自定义验证规则来验证总上传文件大小限制。或者是否有任何预定义的验证规则?任何帮助表示赞赏。

谢谢你!

最佳答案

我认为验证总大小的最佳方法是添加自定义验证规则,这是如何做到的:
在您的 Controller 中:

$validatedData = $request->validate([
    'videos' => 'array|max_uploaded_file_size:3000',
    'videos.*' => 'present|file|mimetypes:video/mp4,video/ogg',
]);
在 AppServiceProvider.php 中注册自定义验证
public function boot() {

    Validator::extend('max_uploaded_file_size', function ($attribute, $value, $parameters, $validator) {
        
        $total_size = array_reduce($value, function ( $sum, $item ) { 
            // each item is UploadedFile Object
            $sum += filesize($item->path()); 
            return $sum;
        });

        // $parameters[0] in kilobytes
        return $total_size < $parameters[0] * 1024; 

    });

}

关于php - Laravel 验证文件数组总允许上传大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47054391/

相关文章:

c# - 多个字段的 MVC 表单验证

php - 更改 PHP 邮件脚本中的 CGI-Mailer

php - 如何为 WP 多站点管理员删除 "Add Existing User"选项?

PHP 使用复选框删除多行

Grails:从域类中的自定义验证器中消除 ConfigurationHolder

html - html中的"Less-than"符号表示数量之间的关系

javascript - jQuery DataTables - 单击列时排序不起作用

php - 在 Laravel 6 中模拟 Auth::user()

laravel - Composer 更新 :Your requirements could not be resolved to an installable set of packages

php - 拉维尔 4 : How do I create a non-primary auto incrementing column with migrations?