Laravel MIME 验证不适用于 .doc 文件

Posted

技术标签:

【中文标题】Laravel MIME 验证不适用于 .doc 文件【英文标题】:Laravel MIME validation not working with .doc file 【发布时间】: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 无法处理损坏的文档。谢谢 【参考方案1】:

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

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

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

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

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

【讨论】:

但我更喜欢使用 mime,指定文件扩展名。我的问题是一个损坏的文档。我尝试了一个新文档,它可以工作。 Mimetypes 无法处理损坏的文档。 那么你们允许上传损坏的文件吗?也许您可以同时使用两种验证(mime 和 mimetypes),这样您可以获得双重好处:) 它不允许上传损坏的文件,这就是我问这个问题的原因,mime 和 mimetypes 工作正常。

以上是关于Laravel MIME 验证不适用于 .doc 文件的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 图像规则验证不适用于 Laravel 8,但适用于 Laravel 7 |拉拉维尔 |图片 |验证

Laravel 请求验证不适用于邮递员请求

Laravel 表单请求验证规则“必需”不适用于空值

Laravel表单请求验证不适用于getValidatorInstance()

中间件身份验证不适用于 Web Laravel 5.2

正则表达式验证规则,以避免特殊字符不适用于 laravel 中的文本字段