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

Uly*_* BN 4 javascript firefox google-chrome wav mime-types

文件输入在 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而不管浏览器如何。

对此有一个后续问题:如何协调这种行为?

Lux*_*Lux 9

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

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

选择将文件上传到Internet时,Bowser执行非简单任务:它选择文件扩展名的MIME类型。为此,每个浏览器都有一个映射表,将已知的文件扩展名映射到 MIME 类型。嗯,这里有一个问题:这个表在不同的浏览器上显然是不一样的。所以这就是为什么你在你的小提琴中得到不同的结果。

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


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

在这两种情况下,如果您发送的文件foo.wav具有 mime 类型,audio/wav或者audio/x-wav您磁盘上的文件将是相同的,那么以后就不可能知道您的服务器为该文件发送的 mime 类型是什么。

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