自定义.abcd扩展名的JSON文件,其Web API File对象的type属性返回空字符串的原因
自定义.abcd扩展名的JSON文件,其Web API File对象的type属性返回空字符串的原因
嘿,这个问题其实挺常见的,我来给你拆解清楚:
首先得明确Web API里File对象的type属性是怎么生成的——它不会读取文件系统中存储的content-type元数据,而是完全依赖浏览器内置的「已知扩展名-MIME类型映射表」来推断。
你用的是自定义的.abcd扩展名,这个扩展名不在浏览器默认的映射列表里(浏览器只认.json、.txt、.png这类标准扩展名),所以它没法匹配到对应的MIME类型,自然就返回空字符串了。
至于你在文件属性里能看到设置好的application/json,那是文件系统层面存储的元数据,但浏览器的File API在处理文件时,并不会去读取这个元数据,只看扩展名做判断。
不想改扩展名的话,给你两个实用的解决方向:
- 如果是你自己创建File对象(比如从Blob生成),在构造时直接指定type参数即可:
const jsonContent = JSON.stringify({ key: "value" }); const blob = new Blob([jsonContent], { type: "application/json" }); const file = new File([blob], "example.abcd", { type: "application/json" }); // 此时file.type会返回"application/json" - 如果是用户上传的本地.abcd文件(比如通过
<input type="file">选择的),浏览器返回的File对象type是空的,这时候你可以:- 基于你已知的文件内容是JSON,直接在后续处理逻辑里硬编码使用
application/json; - 或者读取文件内容尝试解析JSON,验证后手动在处理流程中指定对应的MIME类型。
- 基于你已知的文件内容是JSON,直接在后续处理逻辑里硬编码使用
这样就能绕开扩展名的限制啦!
备注:内容来源于stack exchange,提问作者Yael
相关产品推荐
相关产品推荐

