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

Posted

技术标签:

【中文标题】Response.AddHeader("Content-Disposition") 不在 IE6 中打开文件【英文标题】:Response.AddHeader("Content-Disposition") not opening file in IE6 【发布时间】:2011-04-22 19:36:05 【问题描述】:

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

这在 IE7 中正常工作,但在 IE6 上,当用户单击“打开/保存文件”对话框中的打开按钮时,文件未打开。我上网查了一下,发现 Response.AddHeader("Content-Disposition", "inline; filename="+Server.HtmlEncode(FileName)); 应该提供在 IE6 中工作,并且工作正常..

但问题是大多数可以在浏览器中打开的文件都在页面本身上打开.. 即用户在邮件页面上并单击下载它在那里打开的图像文件,我需要它在另一个窗口中打开,如IE7 的情况下我该怎么办...无法在 Bowser 中打开的其他文件使用系统中的当前应用程序打开,即(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";
        
    

【问题讨论】:

为什么要对文件名进行 HTML 编码? HTTP 标头不是 HTML。 是一个错误,我已将其删除,但它并没有解决问题.. 我从你的部分问题中得到了我的解决方案,谢谢:) 【参考方案1】:

我在 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();

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于Response.AddHeader("Content-Disposition") 不在 IE6 中打开文件的主要内容,如果未能解决你的问题,请参考以下文章

Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls"

response.addHeader("Content-disposition","attachment;filename=" + filename + &qu

解决response.AddHeader("Content-Disposition", "attachment; fileName=" + fileNam(示例

response.addHeader()没有添加

Asp.Net WEb中怎么清空缓存?

HttpServletResponse setHeader 和 addHeader区别