原来,SymfonyExtensionGuesser
并MimeTypeGuesser
使用了不可靠FileInfo
的类。出于这个原因,对 mime 的验证会返回不可预测的结果,并且不能以正确的方式与文件上传一起使用(它返回text/plain
mimejs
等xls
)po
。
对于这个问题,我找到了非常简单的解决方案。
代替
'attachment' => 'required|mimes:jpg,jpeg,bmp,png,doc,docx,zip,rar,pdf,rtf,xlsx,xls,txt|max:10000',
我把它分成两个不同的部分,现在我的验证看起来像这样:
private function createFileAttachmentValidator($file)
{
return Validator::make(
[
'attachment' => $file,
'extension' => \Str::lower($file->getClientOriginalExtension()),
],
[
'attachment' => 'required|max:10000',
'extension' => 'required|in:jpg,jpeg,bmp,png,doc,docx,zip,rar,pdf,rtf,xlsx,xls,txt',
],
$this->validationMessages()
);
}
我只是尝试验证文件的扩展名是否存在并且它是否列在我的in
规则中。这行得通,但是,解决方案并不完美。