验证 .csv 文件时 Laravel MIME 问题

问题描述 投票:0回答:4

我读过几篇关于使用 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'
];

上面没有一行有时表示无效文件有时通过验证。

我怀疑文件无效,然后我从微软网站下载了新的示例文件。这根本不是问题。

有人可以帮助我吗?

谢谢!

validation laravel-5 mime
4个回答
35
投票

惊讶!

CSV 出现

text/plain
mime,这就是问题的原因。

所以为了解决这个问题,我刚刚找到了哪个扩展负责

text/plain
并且我发现了txt所以我刚刚更新了我的规则:

return [
    'sheet' => 'required|mimes:csv,txt'
];

7
投票

我遇到了同样的问题,即使它很旧,我希望这能帮助其他人。 要解决此问题,您必须知道从请求中获得的 mime,才能使用以下代码行找到它:

dd($request->file('document')->getMimeType(),$request->file('document')->getClientOriginalExtension() );

所以就我而言,我上传的文件是 CSV,但我有一个 txt 文件扩展名。所以我像本文之前的答案一样解决了这个问题,只需添加 txt 来请求验证:

return [
    'sheet' => "required|mimes:csv,txt",
];

4
投票

以下是我用于更完整的csv验证的几种类型,希望对以后的使用有所帮助

        return [
            'sheet' => 'required|mimetypes:text/csv,text/plain,application/csv,text/comma-separated-values,text/anytext,application/octet-stream,application/txt'
        ];

0
投票

检测 csv mime 类型需要多行具有一致行格式的文本(可能每行的逗号数量相同),否则该文件与纯文本文件无法区分。

© www.soinside.com 2019 - 2024. All rights reserved.