我读过几篇关于使用 laravel 上传文件时检查文件扩展名问题的文章。
我有同样的问题,即使花了一个小时来处理这个愚蠢的事情,也没有提交解决方案。
这是我的验证规则。
public function rules()
{
return [
'sheet' => 'required',
'file' => 'mimes:csv',
];
}
但是需要的是工作文件,但是是哑剧。
我尝试了其他几种我创立的方法,例如:
return [
'sheet' => ['required', 'mimes:csv']
]
return [
'sheet' => ['required', 'mimes:text/csv']
]
return [
'sheet' => 'required|mimes:text/csv'
];
return [
'sheet' => 'required|mimes:csv'
];
return [
'sheet' => 'required',
'extension' => 'required|in:csv'
];
上面没有一行有时表示无效文件有时通过验证。
我怀疑文件无效,然后我从微软网站下载了新的示例文件。这根本不是问题。
有人可以帮助我吗?
谢谢!
惊讶!
CSV 出现
text/plain
mime,这就是问题的原因。
所以为了解决这个问题,我刚刚找到了哪个扩展负责
text/plain
并且我发现了txt所以我刚刚更新了我的规则:
return [
'sheet' => 'required|mimes:csv,txt'
];
我遇到了同样的问题,即使它很旧,我希望这能帮助其他人。 要解决此问题,您必须知道从请求中获得的 mime,才能使用以下代码行找到它:
dd($request->file('document')->getMimeType(),$request->file('document')->getClientOriginalExtension() );
所以就我而言,我上传的文件是 CSV,但我有一个 txt 文件扩展名。所以我像本文之前的答案一样解决了这个问题,只需添加 txt 来请求验证:
return [
'sheet' => "required|mimes:csv,txt",
];
以下是我用于更完整的csv验证的几种类型,希望对以后的使用有所帮助
return [
'sheet' => 'required|mimetypes:text/csv,text/plain,application/csv,text/comma-separated-values,text/anytext,application/octet-stream,application/txt'
];
检测 csv mime 类型需要多行具有一致行格式的文本(可能每行的逗号数量相同),否则该文件与纯文本文件无法区分。