关于使用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'
];
以上没有任何行正在工作,有时说无效文件通过验证。
我怀疑无效文件,然后我从Microsoft网站下载了新的示例文件。这根本不是问题。
任何人都可以帮助我吗?
谢谢!
答案 0 :(得分:10)
惊讶!
它获得了CSV的text/plain
mime,这就是问题的原因。
所以为了解决这个问题,我发现哪个扩展程序负责text/plain
,我找到 txt ,所以我刚刚更新了我的规则:
return [
'sheet' => 'required|mimes:csv,txt'
];
答案 1 :(得分:1)
我遇到了同样的问题,即使它已经很老了,我希望这会对其他人有所帮助。 要修复它,您必须知道从您的请求中获得了什么 mime,使用以下代码行找到它:
dd($request->file('document')->getMimeType(),$request->file('document')->getClientOriginalExtension() );
所以在我的情况下,我上传的文件是 CSV,但我有一个 txt 文件扩展名。所以我像这篇文章中以前的答案一样解决它,只需添加 txt 来请求验证:
return [
'sheet' => "required|mimes:csv,txt",
];
答案 2 :(得分:0)
以下是我用于更完整的 csv验证的几种类型,希望对以后的使用有所帮助
return [
'sheet' => 'required|mimetypes:text/csv,text/plain,application/csv,text/comma-separated-values,text/anytext,application/octet-stream,application/txt'
];