2017-07-03 143 views
1

文件输入为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发送到我的服务器,无论浏览器。

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

+0

小提琴使用一个文件,你想* *加载? – Bergi

+0

x代表e ** X **实力 – Quentin

+0

Firefox的哪个版本? https://bugzilla.mozilla.org/show_bug.cgi?id=306471最近才关闭。 – Quentin

回答

2

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

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

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

一些浏览器地图.wavaudio/wav和一些到audio/x-wav


所以,如果你的测试用例下载使用MIME类型audio.wav一个文件,然后用小提琴检查它的MIME类型你发布你没有检查什么MIME类型是由您的服务器发送的,当你下载的文件,但只有你的浏览器通过文件扩展名猜测MIME类型。

在这两种情况下,如果发出了一个文件foo.wav的MIME类型audio/wavaudio/x-wav磁盘上的文件将是相同的,这将是不可能的后来知道什么是MIME类型的服务器发送文件。

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

+0

这非常有趣谢谢!虽然我没有从我的服务器上下载文件到客户端,但是从客户端上传到我的服务器。我会尝试编辑我的问题以使其更清楚。基本上,我的计算机(客户端)上有一个'.wav',无论浏览器如何,我都想将其作为'audio/wav'发送到我的服务器。有没有办法实现这一点? –

+0

你也有一个链接,你把这个浏览器映射差异的地方的信息? –

+0

那么,如果你只是上传案件很简单,但答案仍然存在。浏览器将'.wav'映射到MIME类型,显然不同的浏览器将其映射为不同的映射。这就是为什么他们没有相同的MIME类型。不过这没关系。你的错误是你期望相同的文件具有相同的MIME类型,但没有理由期待这一点。所以我没有来源,因为问题是错误的。你问为什么他们发送了不同的MIME类型,但没有理由说它应该是相同的! – Lux

相关问题