如何在laravel 5中验证多个文件上传的mime?

时间:2017-06-01 01:01:33

标签: php laravel

我有一个表单,它将许多输入字段发送到Laravel 5中的控制器,其中有文件name="arquivos[]" <input>字段。我想像我一样在一个步骤中解决所有的验证但似乎它失败的事实是它是接收文件而不是单个文件。表格的代码是:

{!! Form::open(['route' => 'posts.store', 'enctype' => 'multipart/form-data']) !!}
...other inputs
{{  Form::file('arquivos[]', array('class' => 'novo-post-form-item', 'required'=>'','multiple' => '')) }}
{!! Form::close() !!}

在我的posts.store函数中:

$this->validate($request, array(
        'arquivos' => 'required|mimes:image/jpeg,image/png,image/gif,video/webm,video/mp4,audio/mpeg',
        'assunto' => 'max:255',
        'conteudo' => 'required|max:65535'
    ));

注意:我不知道为什么在验证器中我必须在没有[]的情况下指定输入名称,但它的工作方式是......

这个问题类似于我在堆栈溢出时发现的问题,但这次我问的是 Laravel 5 是否有解决方案。看起来,这个validate方法期待单个文件输入字段。提前致谢

1 个答案:

答案 0 :(得分:3)

请仔细阅读Laravel文档。这真的很有帮助

要验证数组字段,您需要:https://laravel.com/docs/5.4/validation#validating-arrays

此外,我认为您要使用mimetypes验证规则,因为mimes验证规则接受文件扩展名作为参数:https://laravel.com/docs/5.4/validation#rule-mimetypes

解决问题的方法:

$this->validate($request, array(
        'arquivos.*' => 'required|mimetypes:image/jpeg,image/png,image/gif,video/webm,video/mp4,audio/mpeg',
        'assunto' => 'max:255',
        'conteudo' => 'required|max:65535'
    ));