Chrome 获取 MIME 类型
在 chromium 开源代码中
https://cs.chromium.org/chromium/src/net/base/mime_util.cc?l=314 314-318 行中提到了:
// We implement the same algorithm as Mozilla for mapping a file extension to
// a mime type. That is, we first check a hard-coded list (that cannot be
// overridden), and then if not found there, we defer to the system registry.
// Finally, we scan a secondary hard-coded list to catch types that we can
// deduce but that we also want to allow the OS to override.
Chrome 实现了与 Mozilla 相同的算法,将文件扩展名映射到 MIME 类型。
首先,Chrome 会检测一个硬编码列表(不能被覆盖)源码中的 kPrimaryMappings,然后如果没有找到符合的,Chrome 会从操作系统注册表中找,最后会扫描一个二级硬编码列表,源码中的 kSecondaryMappings,用来捕获可以推断但是也希望允许操作系统覆盖的类型。
例如:从安装了 Microsoft Excel 的 Windows 系统上传 CSV 文件时,Chrome 会将其报告为 application/vnd.ms-excel。这是因为.csv 未在第一个硬编码列表中指定,因此浏览器会回退到系统注册表。HKEY_CLASSES_ROOT.csv 有一个名为的值 Content Type 设置为 application/vnd.ms-excel。
几台 windows 和 mac 机器测试,有一台 win10,装有 office 的情况下,上传 ppt 文件无法获取 文件 type (MIME)。根据上文里面资料推断,这台及其的 office 注册表可能有问题,导致上传时候从机器找不到这个类型的 MIME。
一个解决办法是,对于第三方安装的应用的类型,前端还是只做文件名后缀名的判断...shit!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于