Laravel MIME 验证

2024-02-26

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

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

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

Edit: dd($_FILES) gives

["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)

Edit 2:

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

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

并转储猜测变量dd($value->guessExtension())我有一个txt哑剧-_- 有效


好的。因此,在彻底挖掘了 Laravel 的源代码之后,我已经弄清楚了这个系统是如何工作的。本质上,验证器根据您传递的参数分解规则,并在本例中将它们发送到validateMimes方法上的Validator班级。这会调用猜测器来找出文件的扩展名。猜测者首先通过循环使用一堆其他猜测者来猜测哑剧类型,这些猜测者使用finfo用于猜测 mime 类型的 PHP 扩展。一旦获得 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 条目。根据我收集到的信息,我假设哑剧类型的猜测者猜测错误。它可能会将其解释为文本文件而不是 JavaScript。尝试确保该文件附加了正确的 mime 类型。

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

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel MIME 验证 的相关文章

随机推荐

  • 与错误共享相关的性能计数器事件

    我正在查看 OpenMP 程序的性能 特别是缓存和内存性能 不久前我发现了如何使用 Vtune 分析性能的指南 其中提到了需要注意的计数器 不过现在好像找不到说明书了 如果您知道我有问题的手册或者您知道计数器 事件 请告诉我 另外 如果您有
  • Google Apps 脚本 - 使用 .replace 方法删除空格对我不起作用

    我正在使用 Google Apps 脚本来创建应用程序 当我尝试从电子表格值中删除空格时遇到问题 我也在 stackoverflow 和其他论坛上引用了很多帖子和评论 他们都在谈论使用 replace方法 然而 replace方法对我不起作
  • 动态加载资源文件

    我想动态加载资源文件 如果我静态地执行它 它显然效果很好 System Media SoundPlayer player new System Media SoundPlayer Properties Resources 88 player
  • 如何分离wpf文本框中的背景图像?

    我是 WPF 新手 在我的项目中 我尝试了带有用户图标的用户名文本框 我的 XAML 代码 gt
  • 用一个命令截断 MySQL 数据库中的所有表?

    是否有一个查询 命令 可以在一次操作中截断数据库中的所有表 我想知道是否可以通过一个查询来完成此操作 删除 即删除表 mysql Nse show tables DATABASE NAME while read table do mysql
  • 如何在Java中查找与通配符字符串匹配的文件?

    这应该很简单 如果我有一个像这样的字符串 Test sample txt 那么获取与此模式匹配的文件列表的普遍接受的方法是什么 例如 它应该匹配 Test1 sample22b txt and Test4 sample spiffy txt
  • SQL Server FOR XML - 基本查询

    我已经获得了一个 XML 文档 我想通过 SQL 脚本生成该文档 但我没有做过类似的事情 也无法找到任何可以引导我生成所需的最终 XML 的示例 我不确定哪种可能的方法更适合我的需要 EXPLICIT 或 PATH 或者甚至可能 我希望在从
  • Laravel 以数组形式获取翻译文件的内容

    你能帮我解决以下问题吗 我需要将翻译文件的内容作为数组获取 无论它是否是PHP文件或一个JSON file 假设我的项目中有以下结构 laravel project resources lang en es file1 php file2
  • QueryDSL 与注释处理器的 Gradle 配置

    我搜索了很多关于配置的信息QueryDSL with Gradle 我想配置注释处理器 以使用特定的注释 Generated在生成的类上 但我只能在这里找到这个链接 Gradle 无法生成 QueryDSL 类 https stackove
  • 在 winform C# 中加载 asp.net 网站

    我有一个 n MDI Windows 窗体应用程序 它包含两种形式 一种形式 测量数据 控制引擎 另一种形式 实验室 应显示我的 asp net 网站 该网站有各种任务供用户执行 如何在该实验室表单中显示 asp net 默认页面 我在用着
  • Oracle:是否可以为模式创建同义词?

    Firstly 我是一个oracle新手 并且我没有当地的oracle大师来帮助我 这是我的问题 问题 我有一些 SQL 脚本必须发布到多个 Oracle 实例 这些脚本创建存储过程 创建存储过程的架构与包含存储过程从中读取的表的架构不同
  • 在 PYOMO 中为 2 个变量定义特定值集

    我正在尝试使用多个变量分配材料属性 例如 密度和电导率是材料 1 材料 2 和材料 3 的两个决策变量 我必须输入以下信息 density of material 1 1000 density of material 2 2000 dens
  • 使用 Spring Boot 异步自定义 ThreadPoolTask​​Executor

    我有一个 Spring Boot 应用程序 负责通过 REST 应答请求 我还推送有关我的应用程序调用的指标 由于这是一项单独的任务 并且我必须立即响应用户 因此我希望异步发布该指标 所以我用过 ThreadPoolTaskExecutor
  • C# 中的双按位非 (~~)

    我一直在读ThreadLocal
  • 我可以在 DDD 中拥有“不完整”的聚合吗?

    DDD 规定您只能通过实体的聚合根来访问实体 举例来说 你有一个聚合根 X 它可能有一个lot子 Y 实体的数量 现在 对于某些场景 您一次只真正关心这些 Y 实体的子集 也许您将它们显示在分页列表或其他内容中 那么是否可以实现一个存储库
  • 如何修复 oh-my-zsh 插件无法工作的问题

    我刚刚发现了 oh my zsh 但我无法让它工作 虽然主题可以完美地工作 但插件却不能 我选择了一些插件 例如 macports 但我既没有完成端口命令 也没有适当的别名工作 这是我的 zshrc Path to your oh my z
  • 使用 React 在 Material UI 对话框中形成表单

    我正在尝试让一个表单在 Material UI Dialog 组件中工作 如果我将对话框包装在表单标签中 它们甚至不会出现在生成的 html 中 还不知道为什么
  • 有 HTML5 注册机示例吗?

    我很难理解如何使用
  • 比较 Struts2 标签中的字符串

    我有一个index jsp页面 其中某些元素根据用户是否登录而打开 关闭
  • Laravel MIME 验证

    我遇到了一个麻烦 关于使用 Laravel 验证 JavaScript 文件的上传 其中验证规则是 javascript file gt required mimes js 据我所知 这应该有效 因为 Laravel 使用mime cont