我尝试将一个小的pdf文件加载到客户端浏览器。我重定向到download_page.aspx执行以下操作:
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.Clear();
Response.AppendHeader("Content-Disposition", "attachment");
Response.TransmitFile(file);
Response.Flush();
问题:
当我从链接或button.OnClientClick="javascript:window.open('download_page.aspx?index=20')"
重定向到download_page.aspx时
有用。 PDF在客户端浏览器中打开
但是,当我点击在页面上执行某些操作然后使用ClientScript.RegisterStartupScript to redirect to download_page.aspx
的按钮时,则download_page.aspx只会闪烁(闪烁)并关闭,不会加载pdf。
这是IE7,IE8的问题。它适用于Firefox
任何帮助表示赞赏
谢谢,
拉曼。
答案 0 :(得分:1)
首先,您不需要ClearHeaders Clear和Flush,因此您的代码应如下所示:
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment");
Response.TransmitFile(file);
现在,您还应该改进 Content-Disposition 标头值并添加文件名以简化最终用户浏览器体验。 IE与文件名的编码方式有所不同,以防它有特殊字符,所以这里有一个示例代码,您可以使用或更改为您的意愿:
public static void AddContentDispositionHeader(HttpResponse response, string disposition, string fileName)
{
if (response == null)
throw new ArgumentNullException("response");
StringBuilder sb = new StringBuilder(disposition + "; filename=\"");
string text;
if ((HttpContext.Current != null) && (string.Compare(HttpContext.Current.Request.Browser.Browser, "IE", StringComparison.OrdinalIgnoreCase) == 0))
{
text = HttpUtility.UrlPathEncode(fileName);
}
else
{
text = fileName;
}
sb.Append(text);
sb.Append("\"");
response.AddHeader("Content-Disposition", sb.ToString());
}
现在,您的代码可以写成:
Response.ContentType = "application/pdf";
AddContentDispositionHeader(Response, "attachment", filename);
Response.TransmitFile(file);
最后一件事是:确保没有人在传输过程中删除文件或写入文件。
答案 1 :(得分:1)