我想限制当用户单击中的浏览按钮时,可以从本机OS文件选择器中选择的文件类型<;输入类型=“文件”>元素。我觉得这是不可能的,但我想知道是否有解决办法。我只想使用HTML和JavaScript;请不要用闪光灯
严格地说,答案是否定的。开发者无法阻止用户上载任何类型或扩展名的文件。
但是,<;输入类型=";文件"&燃气轮机有助于在操作系统的“文件选择”对话框中提供过滤器。比如说,
<;!--(IE 10+、Edge(EdgeHTML)、Edge(Chrome)、Chrome、Firefox 42+)-->;
<;输入type=“file”accept=“.xls、.xlsx”/>
应该提供一种过滤掉.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”/>
[Edge(EdgeHTML)行为:文件类型筛选器下拉列表显示此处提到的文件类型,但不是下拉列表中的默认类型。默认筛选器是所有文件(*)。
也可以在MIME类型中使用星号。例如:
<;输入type=“file”accept=“image/*”/><;!--所有图像类型-->;
<;输入type=“file”accept=“audio/*”/><;!--所有音频类型-->;
<;输入type=“file”accept=“video/*”/><;!--所有视频类型-->
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”/>
j相同的中间部分:这里。
参考:MIME类型列表
重要提示:使用accept属性仅提供一种在感兴趣的文件类型中进行过滤的方法。浏览器仍然允许用户选择任何类型的文件。应该进行额外的(客户端)检查(使用JavaScript,一种方法是这样),并且必须在服务器上使用MIME类型的组合,使用文件扩展名及其二进制签名(ASP.NET、PHP、Ruby、Java)来验证文件类型。您可能还希望参考这些表了解文件类型及其幻数,以执行更健壮的服务器端验证。
以下是关于文件上传和安全性的三个好的解读
编辑:也许使用二进制签名的文件类型验证也可以在客户端使用JavaScript(而不仅仅是通过查看扩展名)使用HTML5文件API进行,但仍然必须在服务器上验证该文件,因为恶意用户仍然可以通过定制HTTP请求上传文件