我有以下代碼實質上是將一個文件從一臺服務器「代理」到另一臺服務器。它在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();
}
}
「它在IE中完美運行」IE嘗試從內容的前x個字節開始猜測內容類型,因此您可能以任何方式發送錯誤的類型(或不發送)。 – 2009-08-28 06:57:36
remoteResponse.ContentType和Utilities.GetContentType(audioFileInfo)都返回「audio/mpeg」,這對於MP3是正確的。 – 2009-08-28 07:10:52