获取的file.type为空字符串,说明浏览器如何获取文件EXCEL文件的MIME类型,前端根据EXCEL文件的type属性判断是否可以上传得到文件["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel"],但是在某个用户的电脑上,通过,type属性是“”,于是开始找各种资料了解浏览器是如何获取到这个type属性的,为什么同一个文件在不同的电脑上获取到的属性是不同的。什么是MIMEType根据MDN上的描述,MIMEType(MultipurposeInternetMailExtensions(MIME)type)是一种表达文档性质和格式的标准化方式。它在IETFRFC6838中定义和标准化。浏览器通常使用MIME类型(而不是文件扩展名)来确定如何处理文档;因此,正确设置服务器以将正确的MIME类型标头附加到响应对象非常重要。所以在浏览器中通过得到的文件对象中的type属性其实就是文件的MIMEType。Chrome获取chromium开源代码中提到的MIME类型https://cs.chromium.org/chromium/src/net/base/mime_util.cc?l=314314-318line://WeimplementthesamealgorithmasMozilla用于将文件扩展名映射到//mime类型。也就是说,我们首先检查一个硬编码列表(不能被//覆盖),然后如果在那里找不到,我们将提交给系统注册表。//最后,我们扫描第二个硬编码列表以捕获我们可以推断的类型,//但我们也希望允许操作系统覆盖这些类型。Chrome实现了与Mozilla相同的算法来将文件扩展名映射到MIME类型。首先,Chrome会在源代码中检测一个硬编码列表(不能被覆盖)中的kPrimaryMappings,然后如果没有找到匹配项,Chrome会从操作系统注册表中查找,最后扫描一个二级硬编码列表,源代码中的kSecondaryMappings,捕获可以推断但又希望允许操作系统覆盖的类型。示例:从安装了MicrosoftExcel的Windows系统上传CSV文件时,Chrome会将其报告为application/vnd.ms-excel。这是因为第一个硬编码列表中未指定.csv,因此浏览器回退到系统注册表。HKEY_CLASSES_ROOT\.csv有一个名为ContentType的值设置为application/vnd.ms-excel。总结前言中遇到的问题在浏览器中获取不到type属性不一定是代码的原因,而是MicrosoftExcel软件或系统中安装的注册表的原因。另外,这个在MDN中的File对象中也有找到。一句话描述:基于目前的实现,浏览器并不会真正读取文件的字节流来判断其媒体类型。它假设基于文件扩展名;重命名为.txt的PNG图像文件是"text/plain"而不是"image/png"。此外,file.type仅对常见文件类型可靠。示例包括图像、文档、音频和视频。不常见的文件扩展名返回一个空字符串。开发人员最好不要依赖此属性作为唯一的身份验证方案。