为什么WAV格式在不同的浏览器中没有相同的mimetype?
文件输入为chrome或firefox中的同一文件提供不同的Mimetype。我有一个wav文件,我想上传,铬说,它是audio/wav
和火狐检测audio/x-wav
。为什么WAV格式在不同的浏览器中没有相同的mimetype?
我知道这两个mimetype非常相似(x-
代表non-standard),但为什么它们在这种情况下的处理方式不同?
这里是一个小提琴来说明这一点:https://jsfiddle.net/r9ae0zfd/。这里是我用于这个例子的WAV文件:https://freesound.org/people/zagi2/sounds/391828/。
在最后,我想的行为是从我的电脑(客户端)采取.wav
文件,并通过HTTP为audio/wav
发送到我的服务器,无论浏览器。
对此有一个后续问题:如何协调此行为?
重要的是要明白,当您将文件存储在磁盘上时,MIME类型不存储在该类型中。这就是为什么我们有文件扩展名如.jpg
或.wav
。在通过HTTP的互联网中,我们不需要它们。我们可以有一个URL http://example.com/foo.wav
,但发送一个带有正确的JPEG MIME类型的JPEG,浏览器将更正为JPEG格式。它不关心文件扩展名。
但是,如果您在本地文件系统上,文件扩展名是相关的。如果你打开一个名为foo.wav
的文件,你的操作系统通过分机.wav
决定打开一些音频播放器。
当选择一个文件上传到互联网时,bowser执行一项不重要的任务:它为文件扩展名选择一个MIME类型。为此,每个浏览器都有一个映射表,将已知的文件扩展名映射到MIME类型。那么,这里有一个问题:这张表显然在不同的浏览器上是不一样的。所以这就是为什么你在你的小提琴中得到不同的结果。
一些浏览器地图.wav
到audio/wav
和一些到audio/x-wav
。
所以,如果你的测试用例下载使用MIME类型audio.wav
一个文件,然后用小提琴检查它的MIME类型你发布你没有检查什么MIME类型是由您的服务器发送的,当你下载的文件,但只有你的浏览器通过文件扩展名猜测MIME类型。
在这两种情况下,如果发出了一个文件foo.wav
的MIME类型audio/wav
或audio/x-wav
磁盘上的文件将是相同的,这将是不可能的后来知道什么是MIME类型的服务器发送文件。
您的浏览器在下载过程中唯一能做的就是更改文件扩展名。例如,如果您发送了一个文件http://example.com/foo
,并且它有audio/wav
作为MIME类型,浏览器可能会将其重命名为foo.wav
。
这非常有趣谢谢!虽然我没有从我的服务器上下载文件到客户端,但是从客户端上传到我的服务器。我会尝试编辑我的问题以使其更清楚。基本上,我的计算机(客户端)上有一个'.wav',无论浏览器如何,我都想将其作为'audio/wav'发送到我的服务器。有没有办法实现这一点? –
你也有一个链接,你把这个浏览器映射差异的地方的信息? –
那么,如果你只是上传案件很简单,但答案仍然存在。浏览器将'.wav'映射到MIME类型,显然不同的浏览器将其映射为不同的映射。这就是为什么他们没有相同的MIME类型。不过这没关系。你的错误是你期望相同的文件具有相同的MIME类型,但没有理由期待这一点。所以我没有来源,因为问题是错误的。你问为什么他们发送了不同的MIME类型,但没有理由说它应该是相同的! – Lux
小提琴使用一个文件,你想* *加载? – Bergi
x代表e ** X **实力 – Quentin
Firefox的哪个版本? https://bugzilla.mozilla.org/show_bug.cgi?id=306471最近才关闭。 – Quentin