验证 .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 获取经过身份验证的用户时出现问题

使用 laravel Sanctum 和 api 令牌身份验证获取用户时出现 401(未经授权)[重复]

Laravel & VueJS CORS 尝试对用户进行身份验证时出现问题,即使使用 Cors 中间件也是如此