在Laravel中验证CSV文件

问题描述 投票:1回答:1

我正在尝试上传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类型?

谢谢!

php laravel csv request
1个回答
0
投票

你可以使用必需的| mimes:csv,txt来验证csv文件。

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