我正在尝试上传CSV文件,我想在做其他任何事情之前验证它。所以我在FormRequest中使用以下代码:
public function rules()
{
return [
'csvFile' => 'required|file|mimes:csv'
];
}
我用来上传文件的表单是:
<form action="{{ route('uploadFile') }}" method="post" enctype="multipart/form-data">
{{ csrf_field() }}
<div class="form-group">
<label for="fileToUpload">CSV File to upload</label>
<input name="csvFile" type="file" class="form-control" id="fileToUpload" placeholder="Select file">
</div>
<button type="submit" class="btn btn-primary">Upload</button>
</form>
问题在于它不起作用。尝试使用getMimeType()检查我的test.csv文件的mime类型我得到:
"text/plain"
但如果我使用getClientMimeType(),我得到:
"text/csv"
从我读到的是:
客户端mime类型( getClientMimeType())是 从上传文件的请求中提取,所以它 不应被视为安全值。
对于受信任的mime类型,请改用 getMimeType()(这会猜到 mime类型基于文件内容)。
显然,我应该使用getMimeType(),但它不起作用(至少大部分时间都是如此)。
我试图通过这样做来模仿:
end(explode('.', $file->getClientOriginalName()));
这将返回&#39; csv&#39;结果,但感觉就像一个黑客!此外,它可以很容易被愚弄。
有没有办法安全地知道某个文件的类型是.csv?
谢谢!
答案 0 :(得分:0)
你可以使用必需的| mimes:csv,txt来验证csv文件。
答案 1 :(得分:0)
由于CSV基本上是一个文本文件,因此将根据文件扩展名检查其mime类型。您的文件是否具有.csv扩展名?
如果您还希望允许.txt扩展名,请将验证规则更改为此:
return [ 'csv_import' => 'required|mimes:csv,txt' ];