验证 .csv 文件时出现 Laravel MIME 问题
Posted
技术标签:
【中文标题】验证 .csv 文件时出现 Laravel MIME 问题【英文标题】:Laravel MIME issue while validating .csv file 【发布时间】:2016-06-04 21:02:42 【问题描述】:我已经阅读了几篇关于使用 laravel 上传文件时检查文件扩展名问题的帖子。
我有同样的问题,即使花了一个小时在愚蠢的事情后面,也没有提交解决方案。
这是我的验证规则的样子。
public function rules()
return [
'sheet' => 'required',
'file' => 'mimes:csv',
];
但需要的是工作文件,但在 mime 上。
我尝试了其他几种我创立的方式,例如:
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 网站下载了新的示例文件。这根本不是问题。
谁能帮帮我?
谢谢!
【问题讨论】:
试试这个:application/csv。 不走运!我发布了答案。这对我有用! 【参考方案1】:惊讶!
CSV 得到 text/plain
mime,这就是问题的原因。
所以为了解决这个问题,我刚刚找到了哪个扩展名负责 text/plain
并且我找到了 txt 所以我刚刚更新了我的规则:
return [
'sheet' => 'required|mimes:csv,txt'
];
【讨论】:
我添加了一个 .sql 文件并应用了您的验证规则,但它仍然通过了。 但是为什么会这样,当我转储文件变量时它显示mimeType: "text/csv"
这个答案不正确。因为用户也可以上传txt文件!【参考方案2】:
这里有几种我用来比较完整的csv验证,希望对以后的使用有所帮助
return [
'sheet' => 'required|mimetypes:text/csv,text/plain,application/csv,text/comma-separated-values,text/anytext,application/octet-stream,application/txt'
];
【讨论】:
【参考方案3】:我遇到了同样的问题,即使它已经很老了,我希望这对其他人有帮助。 要修复它,您必须知道您从请求中获得了什么 mime,使用以下代码行找到它:
dd($request->file('document')->getMimeType(),$request->file('document')->getClientOriginalExtension() );
所以就我而言,我上传的文件是 CSV,但我有一个 txt 文件扩展名。所以我像这篇文章中之前的答案一样通过添加 txt 来请求验证来解决它:
return [
'sheet' => "required|mimes:csv,txt",
];
【讨论】:
以上是关于验证 .csv 文件时出现 Laravel MIME 问题的主要内容,如果未能解决你的问题,请参考以下文章
尝试通过 AJAX 验证 Laravel 表单时出现错误 422
在“422(无法处理的实体)”Laravel 7 中验证错误时出现错误
尝试在 Laravel 中设置身份验证时出现“ReflectionException Function () 不存在”
使用 Laravel Lumen + Passport 获取经过身份验证的用户时出现问题