Php 验证Laravel中的CSV文件

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

我试图上传一个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>
但是如果我使用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' ];