我正在尝试上传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()));
这将返回'csv',但感觉就像一个黑客!而且,它可以很容易被愚弄。
有没有办法安全地知道文件是否是.csv类型?
谢谢!
你可以使用必需的| mimes:csv,txt来验证csv文件。