使用时限制文件格式<输入类型=“文件”>?

我想限制当用户单击中的浏览按钮时,可以从本机OS文件选择器中选择的文件类型<输入类型=“文件”&gt元素。我觉得这是不可能的,但我想知道是否有解决办法。我只想使用HTML和JavaScript;请不要用闪光灯

严格地说,答案是否定的。开发者无法阻止用户上载任何类型或扩展名的文件。

但是,<输入类型="文件&quot&燃气轮机有助于在操作系统的“文件选择”对话框中提供过滤器。比如说,

<!--(IE 10+、Edge(EdgeHTML)、Edge(Chrome)、Chrome、Firefox 42+)-->
<输入type=“file”accept=“.xls、.xlsx”/&gt

应该提供一种过滤掉.xls或.xlsx以外的文件的方法。尽管input元素的MDN页面总是说它支持这个功能,但令我惊讶的是,在Firefox 42版之前,这个功能对我并不适用。这适用于IE 10+、Edge和Chrome

因此,为了支持42岁以上的Firefox以及IE 10+、Edge、Chrome和Opera,我想最好使用逗号分隔的MIME类型列表:

<!--(IE 10+,Edge(EdgeHTML),Edge(Chrome),Chrome,Firefox)-->
<输入类型=“文件”
accept=“application/vnd.openxmlformats officedocument.spreadsheetml.sheet,application/vnd.ms excel”/&gt

[Edge(EdgeHTML)行为:文件类型筛选器下拉列表显示此处提到的文件类型,但不是下拉列表中的默认类型。默认筛选器是所有文件(*)

也可以在MIME类型中使用星号。例如:

<输入type=“file”accept=“image/*”/&gt<!--所有图像类型-->
<输入type=“file”accept=“audio/*”/&gt<!--所有音频类型-->
<输入type=“file”accept=“video/*”/&gt<!--所有视频类型--&gt

W3C建议作者在accept属性中指定MIME类型和相应的扩展名。因此,最好的方法是:

<!--正确的方法:同时使用文件扩展名和相应的MIME类型--&燃气轮机;
<!--(IE 10+,Edge(EdgeHTML),Edge(Chrome),Chrome,Firefox)-->
<输入类型=“文件”
accept=“.xls、.xlsx、application/vnd.openxmlformats officedocument.spreadsheetml.sheet、application/vnd.ms excel”/&gt

j相同的中间部分:这里。

参考:MIME类型列表

重要提示:使用accept属性仅提供一种在感兴趣的文件类型中进行过滤的方法。浏览器仍然允许用户选择任何类型的文件。应该进行额外的(客户端)检查(使用JavaScript,一种方法是这样),并且必须在服务器上使用MIME类型的组合,使用文件扩展名及其二进制签名(ASP.NET、PHP、Ruby、Java)来验证文件类型。您可能还希望参考这些表了解文件类型及其幻数,以执行更健壮的服务器端验证。

以下是关于文件上传和安全性的三个好的解读

编辑:也许使用二进制签名的文件类型验证也可以在客户端使用JavaScript(而不仅仅是通过查看扩展名)使用HTML5文件API进行,但仍然必须在服务器上验证该文件,因为恶意用户仍然可以通过定制HTTP请求上传文件

发表评论