簡體   English   中英

MP4 內容類型在不同瀏覽器中返回為不同的 MIME 類型

[英]MP4 content type returned as different MIME type in different browsers

我有一個使用 C# 作為后端構建的 ASP.NET 應用程序。 我有一個上傳 pdf 並檢查 MIME 類型 application/pdf 以驗證它是有效文件的表單。 我需要在 MP4 文件的單獨表單上執行此操作,但它似乎不起作用。 它總是返回假。 我檢查了 webkit 中返回的 MIME 類型 FileUpload.PostedFile.ContentType,它非常准確。 然而,Firefox 5 和 IE 8 分別針對 text/csv 和 application/octet-stream 進行了測試。 這對我來說完全沒有意義。 我還嘗試將擴展名映射到 web.config 文件中的正確 MIME 類型,如下所示:

<staticContent>
  <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
  <mimeMap fileExtension=".m4v" mimeType="video/m4v" />
  <mimeMap fileExtension=".ogg" mimeType="video/ogg" />
  <mimeMap fileExtension=".ogv" mimeType="video/ogg" />
  <mimeMap fileExtension=".webm" mimeType="video/webm" />
</staticContent>

在后端 CS 文件中,我使用它來測試發布文件的內容類型:

if (file.PostedFile.ContentType == "video/mp4" || 
    file.PostedFile.ContentType == "video/mpeg" || 
    file.PostedFile.ContentType == "video/ogg" || 
    file.PostedFile.ContentType == "video/quicktime" || 
    file.PostedFile.ContentType == "video/webm") 
        return true;
else
        return false;

另請注意,我使用的是 VS 自帶的本地開發服務器

確定發送到服務器的內容類型的是客戶端的瀏覽器 也就是說,瀏覽器發送 ASP.NET 用來填充 HttpPostedFile.ContentType 屬性的 header。

您無法使用 IIS staticContent mime mappings 更改此設置,這些設置僅適用於服務器發送到客戶端的文件(而不是相反)。

在您發布 if-else 塊之前,您最好在 c# 方法中使用一些自定義代碼,以(嘗試)通過服務器端檢查確定真正的 mime 類型。 看看這兩種方法,它們會導致不同的結果和性能:

  1. 使用反射調用內部.NET 框架 class 中的方法(這只是將文件擴展名與框架本身已知的文件擴展名匹配)
  2. 使用對 IE dll 的非托管調用(此方法應該猜測 mime 類型,在文件中查找魔術字節如您可以在 MSDN 文檔中閱讀的那樣

注意:一般來說,您應該始終檢查/確定服務器上的內容類型,並且永遠不要依賴客戶端發送的內容類型(永遠不要相信 HttpPostedFile.ContentType):它可能是意外錯誤(就像您發生的那樣),被某些人故意更改hacky 用戶,錯誤是因為瀏覽器不符合某些標准(眾所周知,IE 會為某些圖像格式發送錯誤的 mime 類型)...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM