📜  laravel 验证 mimes 总是失败 - PHP (1)

📅  最后修改于: 2023-12-03 14:43:50.969000             🧑  作者: Mango

Laravel 验证 Mimes 总是失败 - PHP

在 Laravel 中,我们可以使用 mimes 规则验证上传文件的 MIME 类型是否符合要求。但是,有些时候,即使上传的文件的 MIME 类型在规定的列表中,验证也会失败。本文将介绍一些可能的原因和解决方案。

原因和解决方案
文件名中包含空格

如果上传的文件名中包含空格, L avarel 将无法正确确定 MIME 类型。例如,如果你上传一个名为 "my file.jpg" 的文件,并且启用了 image/* MIME 类型验证规则,Laravel 将返回验证失败的错误信息。

解决方案: 重命名文件,确保文件名中不包含空格或其他特殊字符。

MIME 类型参考表不完整

Laravel 默认的 mimes 规则验证器中包含了许多常见的 MIME 类型,但不一定包含你要验证的类型。例如,如果你想验证 WebP 图像文件,它不在默认的 MIME 类型参考表中,你需要将它手动添加到验证规则中:

$request->validate([
    'image' => 'required|mimes:jpeg,png,webp',
]);

在这个例子中, mimes 规则指定了要验证的 MIME 类型列表,其中包含了 WebP 图像的 MIME 类型。你可以将你想要使用的 MIME 类型添加到该列表中。

安全标头中阻止了 MIME 类型推断

某些浏览器/服务器安全设置可以防止 MIME 类型推断。例如,如果你在服务器上启用了 "Content-Type Options : nosniff " 访问控制头,浏览器将禁止 MIME 类型推断,而返回为未知类型的二进制文件。这将导致 Laravel 验证不会正确地确定文件的 MIME 类型,从而导致验证失败。

解决方案: 禁用服务器或浏览器安全设置中的 MIME 类型推断。

结论

以上介绍了一些可能导致 Laravel 的 MIME 类型验证失败的原因和解决方案。在使用 mimes 规则验证文件时,请要注意以上问题,以确保你的验证器能够正常工作。