【发布时间】:2013-07-04 07:53:05
【问题描述】:
我的站点中有一个页面,它在服务器上动态生成 PDF 报告,同时向用户浏览器显示“请稍候”消息。完成后,它将唯一的文件路径放入会话中,然后打开 download.aspx,这是一个空白栏,page_load 函数中的以下 c# 代码。
string fileUID = (string)(Session["fileUID"]);
string FilePath = @fileUID;
byte[] fileBytes = System.IO.File.ReadAllBytes(FilePath);
string sFileName = "Report.pdf";
System.Web.HttpContext context = System.Web.HttpContext.Current;
context.Response.Clear();
context.Response.ClearHeaders();
context.Response.ClearContent();
context.Response.AppendHeader("content-length", fileBytes.Length.ToString());
context.Response.ContentType = "application/octet-stream";
context.Response.AppendHeader("content-disposition", "attachment; filename=" + sFileName);
context.Response.BinaryWrite(fileBytes);
context.Response.Flush();
System.IO.File.Delete(FilePath);
context.ApplicationInstance.CompleteRequest();
在 IE 中,这会打开下载对话框,允许用户下载文件。但是在 chrome、firefox 和 safari 中,它只是永远位于请等待页面上......
我还尝试为 PDF 文件指定 mime 类型,而不是指定 content-disposition 以使 PDF 显示在浏览器窗口中,再次在 Internet Explorer 中完美运行,但在任何其他浏览器中都没有。
在本地主机上测试和上传到服务器时都会出现此问题。
我在这里和更广阔的世界都进行了搜索,似乎找不到其他人有同样的问题。
请有人告诉我我的方式的错误。
【问题讨论】:
-
是客户端上的请稍候对话框。你有可以给我们看的代码吗?
-
查看实际发出的网络请求。发布的代码可能无关紧要 - 我怀疑 FF/Chrome never make 在“请稍候..”之后的次要请求。
-
pdf 是在浏览器中显示还是在 Acrobat Reader 中显示取决于浏览器。在 IE 中,使用 acrobat 插件显示 PDF 文件是标准的,可能需要配置其他浏览器来执行此操作。 (哪种方法更好,当我的 PDF 下载显示在浏览器中时,我讨厌。讨厌!!!)
-
谢谢大家,我的请等待页面中的功能不正确,因此建议它从未真正调用下载页面
标签: c# asp.net .net web-applications