【问题标题】:Why do the major browsers not support HTMLs ACCEPT attribute for input type="file"?为什么主流浏览器不支持 input type="file" 的 HTML ACCEPT 属性?
【发布时间】:2017-01-19 13:42:54
【问题描述】:

有谁知道如何在输入标签中使用接受属性?我可以看到它已记录在案,但w3schools 表示任何主要浏览器都不支持它。测试也证实了这一点。

我知道验证应该在服务器端完成,现在正在这样做。但是最好让它限制文件上传对话框中的文件类型以提高可用性。

编辑:我完全了解仅客户端验证的安全隐患。我不打算删除服务器端验证,我正在寻找一种方法来提高可用性。

【问题讨论】:

  • 即使支持它,也不会让您免于验证服务器端的输入。
  • 可用性+1!等待 40 秒上传内容却被告知它不够好,这并不是最好的用户体验。
  • 实际上,大多数主流浏览器都支持该属性,因为它们过滤了文件选择器对话框中显示的文件类型。但是,通过更改文件扩展名来解决它是微不足道的,所以你仍然需要检查服务器端。

标签: html cross-browser xhtml forms browser-support


【解决方案1】:

浏览器实际上没有实现ACCEPT 属性的原因是MIME 类型验证是一门科学,而不仅仅是读取文件扩展名那么简单。正如 MediaWiki 所指出的,即使是服务器端 MIME 类型验证也可能很困难:

http://www.mediawiki.org/wiki/Manual:Mime_type_detection

请注意,他们尝试甚至在服务器端验证 MIME 类型。

【讨论】:

    【解决方案2】:

    每个主要浏览器都支持此属性。 有用的链接是—— caniuse.com

    w3 schools browser support for accept attriute

    认为这对想了解浏览器对 HTML accept 属性的支持的人有所帮助。

    【讨论】:

      【解决方案3】:

      最迂腐的原因是它不是required by HTML4 规范(强调我的):

      此属性指定处理此表单的服务器将正确处理的内容类型的逗号分隔列表。用户代理可能在提示用户选择要发送到服务器的文件时使用此信息过滤掉不符合要求的文件。

      这是一个可选功能。

      我个人很想看到这个。例如,当给定image/* 时,浏览器可以将用户的照片库作为默认位置并使用大图标。 text/* 可以转到文档文件夹等。移动浏览器,例如 iPhone,通常根本不允许文件上传,当表单需要图像时,可以使用它来调出图库。如果需要,我们可能会发疯并连接到扫描仪。无限可能。

      但是,此功能并不常用,文件上传对话框的操作可能会因网站支持的不同而不同,这可能会让人非常困惑。

      【讨论】:

        【解决方案4】:

        支持这个标签意味着为浏览器实现一种方法来确定本地资源的 MIME 类型,这将导致相当多的启发式方法和可能暴露于代码注入和/或其他漏洞,浏览器已经拥有它们公平的份额。

        【讨论】:

          猜你喜欢
          • 2011-11-15
          • 2013-11-21
          • 2016-08-12
          • 2021-02-12
          • 2013-03-03
          • 1970-01-01
          • 2019-02-12
          • 2012-04-28
          • 2014-03-17
          相关资源
          最近更新 更多