繁体   English   中英

Laravel 多文件上传验证

[英]Laravel multiple file upload validation

我目前正在以一种形式工作。

我对多文件上传验证有一些问题。 我的表单中只有一个字段允许上传多个文件。

<input type="file" name="file[]" multiple="multiple">

这是我的验证,

$this->validate($request, [
    'file' =>'required',
    'file.*' => 'required|mimes:pdf,jpeg,png |max:4096',
],
 $messages = [
            'mimes' => 'Only PDF, JPEG, PNG are allowed.'
        ]
);

验证工作完美,但我无法在刀片文件中显示错误消息。

这是我的尝试。

@if($errors->has('file'))
    <span class="help-block">
        <strong>{{$errors->first('file')}}</strong>
    </span>
@endif

这是为了在没有上传文件时显示错误。

假设我上传了以下文件,

abc.jpg
abc.html
abc.pdf

当 mimes 类型验证抛出错误时,我无法显示错误消息。 在这种情况下,错误将作为$error->first(file.1)抛出,因为验证在索引 1 处失败

根据上传的文件,该索引可以是任何索引,并且$error->first(file.*)不起作用。

当我仅从表单添加无效文件后显示所有错误时,我遇到了这些错误。

 Only PDF, JPEG, PNG are allowed.
 The type field is required. 
 The number field is required.
 The expiry date field is required. 

任何人都对此有想法。 任何帮助表示赞赏。

谢谢,

您可以使用图像检查。

$errors->has('file.*')

像这样尝试验证

'file.*.mimes' => 'Only PDF, JPEG, PNG are allowed.',

这不是好方法,但对我而言很合适。

我有验证规则

'file' =>'required',
'file.*' => 'required|mimes:pdf,jpeg,png |max:4096',

并且,错误消息

'file.*' => 'Only PDF, JPEG, PNG are allowed.'

由于我只有一个文件上传字段,因此我刚刚在所有消息列表中检查了此错误消息,然后显示如下。

<input type="file" name="file[]" multiple="multiple">
@foreach($errors->all() as $error)
    @if($error=="Only PDF, JPEG, PNG are allowed.")
            <span class="help-block"><strong>{{$error}}</strong></span>
    @endif
@endforeach

谢谢大家

如果有人仍在为多个文件上传问题而苦苦挣扎,这里是正确的方法。

控制器中的验证规则

    $validated = $request->validate([            
        'files.*' => 'mimes:pdf,jpeg,png|max:4096',
        'files' => 'required',
    ], 
    $messages = [
        "files.required" => "You must upload atleast one file",                      
        "files.*.mimes" => "This file type is not allowed", 
        "files.*.max" => "Max file size is 4Mb",
    ]);

在刀片视图中,显示这样的错误

 <form action="{{ url('/multifile') }}" method="POST" enctype="multipart/form- data"> @csrf <div class="form-group"> <label>Select files</label> <input type="file" class="form-control-file @error('files') 'is-invalid' @enderror" name="files[]" multiple> @error('files') <span class="invalid-feedback d-block" role="alert"> <strong>{{ $message }}</strong> </span> @enderror @error('files.*') <span class="invalid-feedback d-block" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> <button class="btn btn-secondary" type="submit">Submit</button> </form>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM