Response.AddHeader(“Content-Disposition”)不在IE6中打开文件

我正在使用Response.AddHeader(“Content-Disposition”,“attachment; filename =”+ Server.HtmlEncode(FileName)); 为用户弹出“打开/保存文件”对话框,以便他们可以将文件下载到本地计算机上。

这通常在IE7中运行良好,但在IE6上,当用户单击“打开/保存文件”对话框中的打开按钮时,文件无法打开。 我通过网络发现了Response.AddHeader(“Content-Disposition”,“inline; filename =”+ Server.HtmlEncode(FileName)); 应该提供IE6中的工作,它的工作正常..

但问题是大多数可以在浏览器中打开的文件在页面本身打开..即用户在邮件页面上点击下载它打开的图像文件,我需要它在IE7的情况下在另一个窗口打开我该怎么做…其他文件无法在系统中使用当前应用程序打开,即(word,excel等)..

请建议一种方法,坚持使用相同的代码为两个IE …我使用的代码在这里….

Response.AddHeader("Content-Disposition", "attachment; filename=" +FileName); Response.AddHeader("Content-Length", file.Length.ToString()); Response.ContentType = ReturnExtension(file.Extension.ToLower()); Response.TransmitFile(file.FullName); Response.End(); private string ReturnExtension(string fileExtension) { switch (fileExtension) { case ".txt": return "text/plain"; case ".doc": return "application/ms-word"; case ".xls": return "application/vnd.ms-excel"; case ".gif": return "image/gif"; case ".jpg": case "jpeg": return "image/jpeg"; case ".bmp": return "image/bmp"; case ".wav": return "audio/wav"; case ".ppt": return "application/mspowerpoint"; case ".dwg": return "image/vnd.dwg"; default: return "application/octet-stream"; } } 

我在IE 6中发现了问题我们必须在IE 6中读取内容并使用缓冲区和二进制写入打开文件,以下代码在IE6中对我有用

 FileStream sourceFile = new FileStream(Server.MapPath(@"FileName"), FileMode.Open); float FileSize; FileSize = sourceFile.Length; byte[] getContent = new byte[(int)FileSize]; sourceFile.Read(getContent, 0, (int)sourceFile.Length); sourceFile.Close(); Response.ClearContent(); Response.ClearHeaders(); Response.Buffer = true; Response.ContentType = ReturnExtension(file.Extension.ToLower()); Response.AddHeader("Content-Length", getContent.Length.ToString()); Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName); Response.BinaryWrite(getContent); Response.Flush(); Response.End(); 

尝试将此内容类型设置为八位字节流:

 Response.ContentType = "application/octet-stream";