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(示例