文件上传accept的兼容性问题
最近接到用户提交的issue,Ubuntu- Firefox上传证书文件时选择文件总失败。调查后发现是兼容性问题,因此这里总结下。
input-accept
先说明下该属性设定的含义。accept属性设定作用为限制文件上传类型,对于accept的值,可以是文件后缀,比如.jpg
这种,也可以是mime
,比如image/jpeg
,同时HTML标准支持逗号分隔实现多文件类型
。
问题代码
<input type="file" accept="application/x-x509-ca-cert" />
现象,Ubuntu- Firefox下,无法选中cer或者crt后缀的证书文本文件。当前项目中是使用的多是封装过的UI组件,即JS层面做的上传限制,这里换成原生写法,问题一样。
兼容性问题
基于问题代码,重新尝试几个环境,结果如下,同时也复现了用户的问题。
- Mac- Chrome-v99.0.4844.74 正常
- Mac- Firefox-v97.0.2 正常
- Ubuntu-Firefox-v93.0 出错
- Ubuntu-Chrome-v99.0.4844.82 出错
原因分析
cert文件在Ubuntu下识别的MIME是application/pkix-cert
而Mac下是application/x-x509-ca-cert
解决办法
这里改为文件后缀来判断限制 <input type="file" accept=".cer,.crt" />
,重新测试,发现OK。
写在最后
针对文本文件进行MIME方式的类型限制,建议优先考虑文件后缀方式。