关于使用Laravel验证JavaScript文件上传的问题,我遇到了麻烦,评估规则为:
'javascript_file' => 'required|mimes:js'
Run Code Online (Sandbox Code Playgroud)
这应是据我所知工作,因为Laravel使用mime_content_type()来猜测文件的默剧,但与文件进行测试时它不经历,给了我一个MIME类型错误application/javascript的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)
Run Code Online (Sandbox Code Playgroud)
编辑2:
正如@searsaw指出的那样,似乎验证猜测是错误的。
并在validateMimes方法中vendor\laravel\framework\src\Illuminate\Validation\Validator.php
并转储猜测变量,dd($value->guessExtension())我得到了一个txt哑剧-_-
好的。因此,在彻底挖掘了 Laravel 的源代码之后,我已经弄清楚了这个系统是如何工作的。本质上,验证器根据您传递的参数分解规则,并在本例中将它们发送到validateMimes类的方法Validator。这会调用猜测器来找出文件的扩展名。猜测器首先通过循环使用许多其他猜测器来猜测 mime 类型,这些猜测器使用finfoPHP 扩展来猜测 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',
Run Code Online (Sandbox Code Playgroud)
中间是 javascript 条目。根据我收集到的信息,我假设哑剧类型的猜测者猜测错误。它可能会将其解释为文本文件而不是 JavaScript。尝试确保该文件附加了正确的 mime 类型。
我测试了使用 时出现的纯 JavaScript 文件mime_content_type(),它返回了text/plain。我猜 Laravel 也是这么做的。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
4594 次 |
| 最近记录: |