Php 验证Laravel中的CSV文件
我试图上传一个CSV文件,我想在做任何其他事情之前验证它。因此,我在FormRequest中使用以下代码:Php 验证Laravel中的CSV文件,php,laravel,csv,request,Php,Laravel,Csv,Request,我试图上传一个CSV文件,我想在做任何其他事情之前验证它。因此,我在FormRequest中使用以下代码: public function rules() { return [ 'csvFile' => 'required|file|mimes:csv' ]; } 我用于上传文件的表单是: <form action="{{ route('uploadFile') }}" method="post" enctype="multipart/form-da
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>
但是如果我使用getClientMimeType(),我会得到:
从我读到的是:
客户端mime类型(getClientMimeType())为
从上传文件的请求中提取,因此它
不应被视为安全值
对于受信任的mime类型,请改用getMimeType()(它猜测
mime类型(基于文件内容)
显然,我应该使用getMimeType(),但它不会工作(至少在大多数情况下)
我试图通过以下方式来模仿这一点:
end(explode('.', $file->getClientOriginalName()));
这将返回“csv”作为结果,但它感觉像一个黑客!而且,它很容易被愚弄
有没有办法安全地知道文件是否为.csv类型
谢谢 您可以使用
required | mimes:csv,txt
验证csv文件。因为csv基本上是一个文本文件,所以它的mime类型会根据文件扩展名进行检查。您的文件是否有.csv扩展名
如果还要允许.txt扩展名,请将验证规则更改为:
return [ 'csv_import' => 'required|mimes:csv,txt' ];
测试用例中csv文件的文件名是什么?请添加上载文件时使用的表单,可能您必须包含“files”=>“true”如果您的文件名包含问题中添加的spaceform,您的验证也会失败查看此问题,这可能会对您有所帮助,尽管为时已晚,验证txt mime将允许任何txt文件,即使是任何.sql文件。尽管为时已晚,但验证txt mime将允许任何txt文件,甚至任何.sql文件。
end(explode('.', $file->getClientOriginalName()));
return [ 'csv_import' => 'required|mimes:csv,txt' ];