accept属性中的值是否需要计算机知道mime类型



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

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

我不明白为什么规范最初使用mime类型,如果他们一开始就使用了扩展(比如chrome accepts),它会简单得多,我猜会更可靠。

对于我目前使用的模拟物的完整列表:

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

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

事实上,它实际上建议您同时使用mime类型和扩展名。

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

如果你仍然担心,你可以在普通浏览器中测试自己,因为它看起来应该是每个用户代理,而不是每个操作系统。

最新更新