gpt4 book ai didi

php - Laravel MIME 验证

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:38:44 28 4
gpt4 key购买 nike

关于使用 Laravel 验证 JavaScript 文件的上传,我遇到了麻烦,验证规则是:

'javascript_file' => 'required|mimes:js'

据我所知这应该有效,因为 Laravel 使用 mime_content_type()猜测文件的 mime,但它没有通过,在使用 application/javascript mime 类型的文件进行测试时给我一个 mime 类型错误

编辑:dd($_FILES) 给出

["name"]=> string(7) "data.js"
["type"]=> string(22) "application/javascript"
["tmp_name"]=> string(35) "C:\easyphp\binaries\tmp\php21D0.tmp"
["error"]=> int(0)
["size"]=> int(12253)

编辑 2:

正如@searsaw 指出的那样,验证猜测似乎是错误的。

vendor\laravel\framework\src\Illuminate\Validation\Validator.php 中挖掘 validateMimes 方法之后

并转储猜测变量 dd($value->guessExtension()) 我得到了一个 txt mime -_- 有效

最佳答案

好的。所以在深入研究了 Laravel 的源代码之后,我已经弄清楚了这个系统是如何工作的。本质上,Validator 从您传递的参数中分解规则,在本例中,将它们发送到 Validator 类的 validateMimes 方法。这会调用猜测器来找出文件的扩展名。猜测器首先通过循环通过一堆其他猜测器来猜测 mime 类型,这些猜测器使用 finfo PHP 扩展来猜测 mime 类型。一旦它有了 mime 类型,它就会将该 mime 类型传递给扩展名猜测器,该扩展名猜测器根据以 mime 类型作为键、扩展名作为值的数组来猜测扩展名。然后它将扩展返回到 Validator 类中的原始调用,看看扩展是否是您首先传递给规则的“参数”数组中的值。呸!

这是扩展名猜测器用来根据 MIME 类型猜测扩展名的条目。

'application/java-archive' => 'jar',
'application/java-serialized-object' => 'ser',
'application/java-vm' => 'class',
'application/javascript' => 'js',
'application/json' => 'json',
'application/jsonml+json' => 'jsonml',

中间是 javascript 条目。根据我收集到的信息,我假设 mime 类型的猜测者猜错了。它可能将其解释为文本文件而不是 javascript。尝试确保文件附加了正确的 MIME 类型。

我测试了使用 mime_content_type() 出现的普通 javascript 文件,它返回了 text/plain。我猜这也是 Laravel 正在做的事情。

希望这对您有所帮助!

关于php - Laravel MIME 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19849702/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com