Firefox忽略Response.ContentType

时间:2009-08-28 06:35:02

标签: c# .net asp.net httpwebrequest

我有以下代码,它基本上是“代理”从一个服务器到另一个服务器的文件。它在IE中完美运行,但Firefox似乎忽略了Content-Type标题并始终将文件(MP3)传输为text/html

这不是一个主要问题,但我希望它能在所有浏览器中正常运行,那么任何人都可以提供帮助吗?此外,如果有更好/更有效的方法来实现这一点,请发布它!

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();
  }
}

5 个答案:

答案 0 :(得分: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)传输到客户端时,适用于我。

答案 1 :(得分:3)

如果您还没有这样做,我的第一步是使用Live HTTP Headers firefox插件或fiddler检查标题,以确保它们符合您的期望。

答案 2 :(得分:0)

典型的类型是audio / mp3。你看到了什么问题?

还有关于Quicktime劫持MP3文件的链接here

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

我不确定但是可能清除标题并添加mime-type可以帮助

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