【问题标题】:Validate CSV file in Laravel [duplicate]在 Laravel 中验证 CSV 文件 [重复]
【发布时间】:2018-06-03 06:53:09
【问题描述】:

我正在尝试上传 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' 作为结果,但感觉就像一个 hack!此外,它很容易被愚弄。

有没有办法安全地知道文件是否为 .csv 类型?

谢谢!

【问题讨论】:

  • 你的测试用例中的csv文件的文件名是什么?
  • 请添加您上传文件的表单,可能您必须包含'files' => 'true'
  • 如果您的文件名包含空格,您的验证也会失败
  • 表格添加有问题
  • 看看这个问题,这可能对你有帮助laracasts.com/discuss/channels/general-discussion/…

标签: php laravel csv request


【解决方案1】:

您可以使用required|mimes:csv,txt 验证csv 文件。

【讨论】:

  • 虽然为时已晚,但验证 txt mime 将允许任何 txt 文件,甚至任何 .sql 文件。
【解决方案2】:

由于 CSV 基本上是一个文本文件,因此会根据文件扩展名检查其 mime 类型。您的文件是否具有 .csv 扩展名?

如果您也想允许 .txt 扩展名,请将您的验证规则更改为:

return [ 'csv_import' => 'required|mimes:csv,txt' ];

【讨论】:

  • 虽然为时已晚,但验证 txt mime 将允许任何 txt 文件,甚至任何 .sql 文件。
猜你喜欢
  • 1970-01-01
  • 2019-04-30
  • 2017-06-18
  • 2014-02-26
  • 2021-08-22
  • 2019-06-12
  • 2016-11-28
  • 2012-07-27
  • 2016-06-04
相关资源
最近更新 更多