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">×</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'
效果很好! ! ! (在这里回答是因为我没有资格评论他的回答)
我正在研究 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">×</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'
效果很好! ! ! (在这里回答是因为我没有资格评论他的回答)