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->file('document'));
,这样我们就可以看到文件信息,包括它的 MIME。
我的问题是一个损坏的文档。我尝试了一个新文档,它可以工作。 Mimetypes 无法处理损坏的文档。谢谢
【参考方案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 工作正常。以上是关于Laravel MIME 验证不适用于 .doc 文件的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 图像规则验证不适用于 Laravel 8,但适用于 Laravel 7 |拉拉维尔 |图片 |验证