2009-08-28 69 views
4

我有以下代碼實質上是將一個文件從一臺服務器「代理」到另一臺服務器。它在IE中完美工作,但Firefox似乎忽略了Content-Type標題,並始終以text/html傳輸文件(MP3)。Firefox忽略Response.ContentType

這不是一個大問題,但我想讓它在所有瀏覽器中正常工作,所以任何人都可以提供幫助嗎?另外,如果有更好/更有效的方法來完成這個,請發佈!

FileInfo audioFileInfo = new FileInfo(audioFile); 
HttpWebRequest downloadRequest = (HttpWebRequest) WebRequest.Create(audioFile); 
byte[] fileBytes; 

using (HttpWebResponse remoteResponse = (HttpWebResponse) downloadRequest.GetResponse()) 
{ 
    using (BufferedStream responseStream = new BufferedStream(remoteResponse.GetResponseStream())) 
    { 
    fileBytes = new byte[remoteResponse.ContentLength]; 
    responseStream.Read(fileBytes, 0, fileBytes.Length); 

    Response.ClearContent(); 
    // firefox seems to ignore this... 
    Response.ContentType = Utilities.GetContentType(audioFileInfo); 
    // ... and this 
    //Response.ContentType = remoteResponse.ContentType; 
    Response.AddHeader("Content-Disposition", string.Format("attachment; filename=\"{0}\"", audioFileInfo.Name)); 
    Response.AddHeader("Content-Length", remoteResponse.ContentLength.ToString()); 
    Response.BinaryWrite(fileBytes); 
    Response.End(); 
    } 
} 
+1

「它在IE中完美運行」IE嘗試從內容的前x個字節開始猜測內容類型,因此您可能以任何方式發送錯誤的類型(或不發送)。 – 2009-08-28 06:57:36

+0

remoteResponse.ContentType和Utilities.GetContentType(audioFileInfo)都返回「audio/mpeg」,這對於MP3是正確的。 – 2009-08-28 07:10:52

回答

6

嘗試添加Response.ClearHeaders()調用ClearContents()像X2提到和發送文件application/octet-stream前:

Response.ClearHeaders(); 
Response.ClearContent(); 
Response.ContentType = "application/octet-stream"; 
Response.AddHeader("Content-Disposition", "attachment; filename=\"blah\""); 
... 

工作對我來說,當我需要下載文件(不一定是MP3音樂)傳送到客戶端。

+0

我不確定Utilities.GetContentType(audioFileInfo)正在返回什麼,但是Loris的建議應該起作用。 Response.ContentType =「application/octet-stream」; – 2009-09-03 16:49:54

-1

我不知道,但也許清除頁眉和添加MIME類型可以幫助

Response.ClearHeaders(); 
Response.AddHeader("MIME Type",Utilities.GetContentType(audioFileInfo)); 
+0

-1,「MIME類型」不是w3c標準http頭。 – 2009-09-03 16:37:46

0

典型的類型,這是音頻/ MP3。你看到什麼問題?

關於Quicktime劫持MP3文件,還有一個鏈接here

0

如果僅使用Response.Clear()而不是Response.ClearContent(),結果是否相同?