0

所以我有一个标准<input type="file" accept="..."/>,接受的地方是一大堆不同的 mime 类型。我已经验证了服务器后端的文件类型,但我想确保我没有过滤掉客户端 UI 上的有效文件。我意识到旧的浏览器根本不会过滤文件,这很好。我担心的是现代浏览器可能无法识别 mime 类型并过滤掉实际有效的文件。

所以我的问题基本上是,“接受”属性有多可靠?例如,如果未安装 microsoft office,浏览器会识别 .docx mime 类型吗?此外,某些文件类型有许多不同的可能的 mime 类型与之关联,如果我只列出其中一种 mime 类型有关系吗?

我不明白为什么规范最初使用mime-types,它会简单得多,我猜如果他们刚开始使用扩展名(比如chrome接受)会更可靠。

对于我目前使用的 mime 的完整列表:

application/msword,
application/vnd.openxmlformats-officedocument.wordprocessingml.document,
application/rtf,
application/msexcel,
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,
application/vnd.openxmlformats-officedocument.spreadsheetml.template,
application/vnd.ms-excel.template.macroEnabled.12,
application/vnd.ms-excel.sheet.macroEnabled.12,
text/csv,
application/mspowerpoint,
application/vnd.openxmlformats-officedocument.presentationml.presentation,
application/vnd.ms-powerpoint.presentation.macroEnabled.12,
application/vnd.ms-powerpoint,
application/vnd.openxmlformats-officedocument.presentationml.template,
application/vnd.openxmlformats-officedocument.presentationml.slideshow,
application/pdf,
image/jpg,
image/jpeg,
image/png,
image/bmp,
image/gif,
text/plain,
message/rfc822,
application/vnd.oasis.opendocument.text,
application/vnd.oasis.opendocument.spreadsheet,
application/vnd.oasis.opendocument.presentation,
application/visio,application/vnd.visio,
application/vst,
application/vnd.visio.webdrawing,
application/x-mspublisher
4

1 回答 1

1

该规范允许您使用扩展以及 mime 类型

事实上,它实际上建议您同时使用mime-type 和 extension。

至于要求操作系统识别 mime 类型,这实际上没有意义,因为 mime 类型是 Internet 协议文件标识符。它实际上取决于用户代理(浏览器)对 mime 类型的支持。由于这是一个相当新的结构,如果浏览器只是通过在 mime 类型和扩展之间建立一个公共映射来最低限度地“支持”它,我不会感到惊讶。我无法想象浏览器会尝试统计所有可读文件以确定 mime 类型(根据我的经验,这甚至不接近可靠)。accept的意图似乎更多是关于改变文件上传对话框的外观,我怀疑任何浏览器都这样做了,尽管考虑到现在浏览器的发布速度有多快,我肯定是错的。

If you're still concerned, you could test yourself in common browsers since it really seems like it should be per user agent rather than per OS.

于 2013-02-21T04:58:32.127 回答