Laravel 8 上传文件mimes/mimetypes验证规则不生效问题咨询
问题根因
- 你混用了
mimes和mimetypes两类规则的传参要求:mimetypes规则必须传入完整的MIME类型字符串(比如application/pdf),你在plagiarism_report字段下给的是pdf,doc,docx,txt这类文件后缀,不符合规则要求,必然验证失败mimes规则才是传入文件后缀名,Laravel内部会自动关联后缀对应的标准MIME类型做校验
- 部分环境下文件MIME识别可能存在偏差,比如docx文件可能被识别为非标准MIME值,也会导致校验不通过
修复后的代码
直接统一用mimes规则即可,符合你要的校验逻辑:
$validator = Validator::make($request->all(), [ 'proposal_summary' => 'mimes:pdf|max:2048', 'plagiarism_report' => 'mimes:pdf,doc,docx,txt|max:2048', 'final_proposal' => 'mimes:pdf,doc,docx,txt|max:2048', ]);
如果你坚持要用mimetypes规则,需要填写完整的MIME类型,示例如下:
$validator = Validator::make($request->all(), [ 'proposal_summary' => 'mimetypes:application/pdf|max:2048', 'plagiarism_report' => 'mimetypes:application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,text/plain|max:2048', 'final_proposal' => 'mimetypes:application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,text/plain|max:2048', ]);
可选校验调试方法
如果修改后依然校验失败,可以先打印对应上传文件的实际MIME值,确认和规则里的配置匹配:
// 输出对应文件的实际识别MIME dd($request->file('proposal_summary')?->getMimeType());
内容的提问来源于stack exchange,提问作者Helder Doggo
相关产品推荐
相关产品推荐

