文件输入在 Chrome 或 Firefox 中为同一文件提供不同的 Mimetype。我有一个我想上传的 wav 文件,chrome 说是audio/wav
和火狐检测audio/x-wav
.
我知道这两个 mimetype 非常相似(x-
代表非标准 https://en.wikipedia.org/wiki/Media_type#Unregistered_x._tree),但是为什么在这种情况下它们的处理方式不同呢?
这是一个小提琴来说明这一点:https://jsfiddle.net/r9ae0zfd/ https://jsfiddle.net/r9ae0zfd/。这是我用于此示例的 WAV 文件:https://freesound.org/people/zagi2/sounds/391828/ https://freesound.org/people/zagi2/sounds/391828/.
最后我想要的行为是采取.wav
文件从我的计算机(客户端)并通过 HTTP 将其发送到我的服务器audio/wav
与浏览器无关。
对此还有一个后续问题:如何协调这种行为?
重要的是要理解,当您将文件存储在磁盘上时,mime 类型是不存储在该类型中。这就是为什么我们有这样的文件扩展名.jpg
or .wav
。在通过 HTTP 的互联网中,我们不需要它们。我们可以有一个网址http://example.com/foo.wav
但发送具有正确 JPEG mime 类型的 JPEG,浏览器会将其正确呈现为 JPEG。它不关心文件扩展名。
但是,如果您使用本地文件系统,则文件扩展名是相关的。如果您打开一个名为foo.wav
您的操作系统由扩展名决定.wav
打开一些音频播放器。
当选择一个文件并将其上传到互联网时,bowser 会执行一项重要的任务:它为文件扩展名选择 mime 类型。为此,每个浏览器都有一个映射表,将已知的文件扩展名映射到 mime 类型。好吧,这里有一个问题:这个表在不同的浏览器上显然是不一样的。这就是为什么你的小提琴会得到不同的结果。
一些浏览器地图.wav
to audio/wav
和一些audio/x-wav
.
因此,如果您的测试用例正在下载 mime 类型的文件audio.wav
然后使用您发布的小提琴检查其 mime 类型,您不会检查下载文件时服务器发送的 mime 类型,而只会检查浏览器猜测文件扩展名的 mime 类型。
在这两种情况下,如果您发送了文件foo.wav
与哑剧类型audio/wav
or audio/x-wav
您磁盘上的文件将是相同的,并且以后不可能知道您的服务器为该文件发送的 MIME 类型是什么。
下载过程中浏览器唯一可以做的就是更改文件扩展名。例如,如果您发送了一个文件http://example.com/foo
它有audio/wav
作为 mime 类型,浏览器可能会将其重命名为foo.wav
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)