【问题标题】:Laravel MIME validation not working with .doc fileLaravel MIME 验证不适用于 .doc 文件
【发布时间】:2021-10-27 12:00:09
【问题描述】:

验证表单与另一个扩展程序一起成功,但不适用于.doc。

<form method="POST" action="{{ route('documents.store') }}" class="needs-validation" novalidate enctype="multipart/form-data">
    @csrf

    <label for="document" class="form-label">
        File <strong class="text-azul">(Files accepteds: PDF,WORD,JPG,PNG)</strong>
    </label>
    <input class="form-control" type="file" id="document" name="document" accept=".doc,.docx,.pdf,.png,.jpg" required>
    <x-jet-button>{{ __('Save') }}</x-jet-button>
</form>

在控制器中:

$request->validate([
    'document' => 'file|mimes:doc,docx,pdf,png,jpg,jpeg',
]);

在选择扩展名为 .doc 的文件时,它返回:

文档必须是以下类型的文件:doc、docx、pdf、png、jpg、jpeg。

【问题讨论】:

  • 我不确定 Laravel 最终读取的 MIME 是什么。请参阅documentation。您的 MIME 应该没问题,只是为了测试,正好在验证之前执行 dd($request-&gt;file('document'));,这样我们就可以看到文件信息,包括它的 MIME。
  • 我的问题是一个损坏的文档。我尝试了一个新文档,它可以工作。 Mimetypes 无法处理损坏的文档。谢谢

标签: php laravel validation


【解决方案1】:

根据Laravel documentation,您还可以验证 mime 类型:

$request->validate([
    'document' => 'mimetypes:application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document',
]);

上面的例子应该只允许 doc 和 docx 类型(你可以根据需要添加)。

请在下面的链接中找到常见的 mime 类型:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types

【讨论】:

  • 但我更喜欢使用 mime,指定文件扩展名。我的问题是一个损坏的文档。我尝试了一个新文档,它可以工作。 Mimetypes 无法处理损坏的文档。
  • 那么你们允许上传损坏的文件吗?也许您可以同时使用两种验证(mime 和 mimetypes),这样您可以获得双重好处:)
  • 它不允许上传损坏的文件,这就是我问这个问题的原因,mime 和 mimetypes 工作正常。
猜你喜欢
  • 1970-01-01
  • 2014-09-11
  • 2016-08-05
  • 2013-11-19
  • 2015-07-02
  • 2016-06-12
  • 2023-03-19
  • 2015-11-29
  • 2021-02-11
相关资源
最近更新 更多