为什么WAV格式在不同的浏览器中没有相同的mimetype?

时间:2017-07-03 17:28:40

标签: javascript google-chrome firefox mime-types wav

文件输入为chrome或firefox中的同一文件提供不同的Mimetype。我有一个我要上传的wav文件,chrome说它是audio/wav而firefox检测audio/x-wav

我知道这两个mimetype非常相似(x-代表non-standard),但为什么在这种情况下它们的处理方式不同?

这是一个用来说明这一点的小提琴:https://jsfiddle.net/r9ae0zfd/。这是我用于此示例的WAV文件:https://freesound.org/people/zagi2/sounds/391828/

最后,我想要的行为是从我的计算机(客户端)获取.wav文件,并通过HTTP将其作为audio/wav发送到我的服务器,而不管浏览器是什么。

接下来有一个问题:如何协调这种行为?

1 个答案:

答案 0 :(得分:2)

了解当您在磁盘上存储文件时,mime类型未存储在该类型中非常重要。这就是为什么我们有.jpg.wav等文件扩展名的原因。在通过HTTP的互联网上,我们不需要它们。我们可以有一个网址http://example.com/foo.wav,但是发送一个JPEG JPEG格式正确的JPEG,浏览器会将其正确呈现为JPEG格式。它并不关心文件扩展名。

但是,如果您在本地文件系统上,则文件扩展名是相关的。如果您打开一个名为foo.wav的文件,您的操作系统会通过分机.wav决定打开一些音频播放器。

当选择要将其上传到互联网的文件时,bowser执行一项非常重要的任务:它为文件扩展名选择mime类型。为此,每个浏览器都有一个映射表,将已知的文件扩展名映射到mime类型。嗯,这里有一个问题:这个表在不同的浏览器上显然不相同。这就是为什么你的小提琴会得到不同的结果。

有些浏览器将.wav映射到audio/wav,有些浏览器映射到audio/x-wav

因此,如果您的测试用例正在下载mime类型audio.wav的文件,然后使用您发布的小提琴检查其mime类型,则不要检查下载时服务器发送的mime类型该文件,但浏览器只能为文件扩展名猜测mime类型。

在这两种情况下,如果您使用mime类型foo.wavaudio/wav发送了文件audio/x-wav,则磁盘上的文件将是相同的,并且它不会成为稍后可能知道服务器为文件发送的mime类型是什么。

您的浏览器在下载过程中唯一可以做的就是更改文件扩展名。例如,如果您发送文件http://example.com/foo并且其audio/wav为mime类型,则浏览器可能会将其重命名为foo.wav