使浏览器能够在大型PDF文件上快速开始渲染初始页面

时间:2014-05-15 21:57:31

标签: c# asp.net pdf iis webforms

我的应用程序目前允许直接链接到服务器上的PDF文件,但现在需要保护文件,并且出于安全考虑,必须逐步淘汰直接链接。

我已尝试以下行将PDF文件发送到客户端。它工作正常。

        Response.Clear();
        Response.ContentType = "Application/pdf";
        Response.WriteFile(filepath);
        Response.End();

但是有一个问题。

当链接PDF文件时,浏览器会在下载其余页面时立即呈现前几页。但是通过上面的方法,浏览器会等到整个文件被下载后再继续渲染PDF。

那么有没有办法欺骗浏览器模仿打开直接链接的PDF?

1 个答案:

答案 0 :(得分:0)

阅读完你的帖子后,我意识到我的应用程序具有相同的行为(尽管考虑到文件的典型大小和所使用的格式,它还没有成为问题 - 至少还没有...)经过一些研究,你和#39;根据您要引入的复杂程度,我们必须从几个选项中进行选择:

如果你想要一个更简单的实现,你需要稍微改变你的方法来设置一个循环,将一定量的文件读入内存中的缓冲区然后执行Response.Write那个缓冲区。在循环中,您然后执行Response.Flush将数据推送到客户端。由于这是同步的,因此您必须等到刷新完成后再按下文件的下一个块。但是,如果主要目标是获得前几个块,那么客户端应用程序可以开始使用它们,这可能会满足您的需求。

如果您希望获得更好的服务器端可扩展性并愿意接受更多复杂性,那么您需要使用Response.BeginFlush进行探索。我相信异步写入是在.Net 4.5中引入的。这是一个可以帮助您入门的链接:

http://www.slideshare.net/pragyanshis/asynchronous-reading-and-writing-http-r-equest

我正在尝试探索这两种方法来做我的"做"我自己申请的清单......