2017-07-03 74 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

相關問題