文件上传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方式的类型限制,建议优先考虑文件后缀方式。

相关文档