0

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

谢谢

刀片文件

<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>

控制器文件

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 文件时,它返回如下错误

报告文件上传失败。

编辑:请求数组响应

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] => 
        )

)
4

2 回答 2

1

只需将“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

于 2021-01-12T10:15:23.370 回答
1

这可能有几个原因。但是 Frontend 乍一看还不错。可能是服务器问题。例如 FileSize、MimeType。您可以在第一步中输出请求变量以排除PDF尚未到达的可能性。

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

于 2021-01-12T10:05:44.150 回答