Laravel 8.x PDF 文件验证工作不正常

Laravel 8.x PDF file validation is not working correctly

我正在研究 Laravel 8.x。我的任务是在服务器端验证 .PDF 文件。一切正常,但当我上传有效的 PDF 文件时,它没有验证并返回错误。 我的源代码如下。如果您发现

,请指正我的错误

谢谢

blade file

<form class="w-100" id="addnotes" method="post" enctype="multipart/form-data" action="{{ route('upload-member-reports') }}">
    {{ csrf_field() }}
    <div class="modal-header">
    <h5 class="modal-title" name="report-file" id="exampleModalLongTitle">Upload Reports</h5>
    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
        <span aria-hidden="true">&times;</span>
    </button>
    </div>
    <div class="modal-body">
    <label class="file ">
        <input type="file" name="reportfile" id="reportfile"  aria-label="File browser example">
        <span class="file-custom"></span>
    </label>
    @if($errors->has('reportfile'))
        <div class="error text-danger">{{ $errors->first('reportfile') }}</div>
    @endif
    <input type="date" name="reportdate" class="form-control mt-20px" value="{{ old('reportdate') }}" placeholder="Select Date">
    <!-- <textarea type="textarea" rows="4" cols="50" class="form-control" placeholder="Enter Your Notes..."></textarea> -->
    @if($errors->has('reportdate'))
        <div class="error text-danger mt-5px">{{ $errors->first('reportdate') }}</div>
    @endif
    <input type="hidden" name="manager_id" value="{{ Auth::user()->id }}">
    <input type="hidden" name="member_id" value="{{ $id }}">
    </div>
    <div class="modal-footer">
        <input type="submit" class="btn btn-orange" value="Submit">
    </div>
</form>

controller file

public function uploadMemberReports( Request $request ){
    # Validation  Rules
    $rules = [
        'reportdate'=>'required',
        'reportfile' => 'required|mimes:pdf',
    ];
    $messages = [
        'reportdate.required' =>'Date is required.',
        'reportfile.required' => 'File is required.',
        'reportfile.mimes' => 'Only PDF files are allowed.',
    ];

    $validator = Validator::make( $request->all(), $rules, $messages);

    if ( $validator->fails() ) {
        # if validations fails redirect back with errors
        return redirect()->back()->withErrors($validator)->withInput();
    } else {
        # next action
    }
}

当我尝试使用有效的 PDF 文件时,它返回错误如下

The reportfile failed to upload.

编辑: 请求数组 response

Array
(
    [_token] => yaX0ohRjl6tR298Zd9WeSLcgxcoVQ9nPx3K5gO4S
    [reportdate] => 2021-01-12
    [manager_id] => 2
    [member_id] => 4
    [reportfile] => Illuminate\Http\UploadedFile Object
        (
            [test:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 
            [originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => labreports_12.pdf
            [mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => application/octet-stream
            [error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 1
            [hashName:protected] => 
            [pathName:SplFileInfo:private] => 
            [fileName:SplFileInfo:private] => 
        )

)

这可能有多种原因。但是 Frontend 乍一看还不错。可能是服务器问题。例如 FileSize、MimeType。可以在第一步输出request变量,排除PDF未到的可能。

编辑(见您的评论):'required|mimes:application/pdf'

只需将“enctype”添加到您的表单中

<form method="POST"  enctype="multipart/form-data" action="your_action">

MIME 规则的基本用法

'reportfile' => 'mimes:png'

尝试完整扩展

'reportfile' => 'mimes:application/pdf' 

"reportfile" => 'mimetypes:application/pdf'

MIME 类型和扩展的完整列表https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types

按照@maik Lowrey,我成功使用了:

'file' => 'required|mimes:pdf|max:2048'

效果很好! ! ! (在这里回答是因为我没有资格评论他的回答)