2

因此,我想将用户上传选项限制为特定文件扩展名列表。这纯粹是为了让用户更容易,我也已经限制了服务器上的文件类型上传。

我有一个扩展列表,但没有 mime 类型列表。由于接受的扩展可能会发生变化,而且我没有看到任何完全可靠的方法来动态计算它们的 mime 类型(并且宁愿避免这种情况);我想只是将扩展提供给<input type="file">元素的“接受”属性。

我注意到这在 Chrome 上完全符合预期,但在 FF 或 IE10 中却没有(在这些浏览器中,它似乎只是回退到所有文件)。

我意识到这不是标准的一部分,但有什么方法可以在“接受”属性中接受扩展而不是 mimetypes,这是(现代浏览器)跨浏览器友好的。我的测试用例使用<input type="file" accept=".doc,.docx,.bad" />

如果这是不可能的,最好的方法是什么?注意:我没有保证我的服务器注册表将包含我使用的扩展的所有 mimetypes,并且由于此列表可能很长,因此手动更新 mimetypes 列表是相当不切实际的(并且将是我的最后手段) .

4

1 回答 1

3

不,这不安全。HTML 4.01accept属性被定义为以逗号分隔的媒体类型列表。甚至这也是最近才实现的(例如,在 IE 9 中不支持)。

在 HTML5 草案中,该属性(最近)也被扩展为允许扩展,HTML5 CR 对文件输入的描述甚至建议:“鼓励作者在查找数据时指定任何 MIME 类型和任何相应的扩展名具体格式。” 然而,这还没有被广泛实施。

它在概念上也很混乱。媒体类型的设计旨在成为指定文件和其他数据类型的标准化和互操作方式。文件扩展名只是在某些系统中以特殊方式处理的文件名的一部分,没有标准,超出了一些不太一致的常见做法。将两者混为一谈会带来麻烦,尽管这背后有一些务实的原因。

无论如何,在文件输入中,文件扩展名和媒体类型之间的映射是由浏览器连同用户计算机的底层操作系统和文件系统一起完成的;服务器不参与。

使用File API,您可以在支持它的浏览器(例如 Firefox)上检查所选文件的文件名并获取文件扩展名并通知用户是否选择了文件) 将不被接受。但这会在选择之后发生,不会影响文件选择小部件,您只能要求用户更改选择。

于 2013-02-11T06:48:09.510 回答