我的应用程序目前允许直接链接到服务器上的PDF文件,但现在需要保护文件,并且出于安全考虑,必须逐步淘汰直接链接。
我已尝试以下行将PDF文件发送到客户端。它工作正常。
Response.Clear();
Response.ContentType = "Application/pdf";
Response.WriteFile(filepath);
Response.End();
但是有一个问题。
当链接PDF文件时,浏览器会在下载其余页面时立即呈现前几页。但是通过上面的方法,浏览器会等到整个文件被下载后再继续渲染PDF。
那么有没有办法欺骗浏览器模仿打开直接链接的PDF?
答案 0 :(得分:0)
阅读完你的帖子后,我意识到我的应用程序具有相同的行为(尽管考虑到文件的典型大小和所使用的格式,它还没有成为问题 - 至少还没有...)经过一些研究,你和#39;根据您要引入的复杂程度,我们必须从几个选项中进行选择:
如果你想要一个更简单的实现,你需要稍微改变你的方法来设置一个循环,将一定量的文件读入内存中的缓冲区然后执行Response.Write
那个缓冲区。在循环中,您然后执行Response.Flush
将数据推送到客户端。由于这是同步的,因此您必须等到刷新完成后再按下文件的下一个块。但是,如果主要目标是获得前几个块,那么客户端应用程序可以开始使用它们,这可能会满足您的需求。
如果您希望获得更好的服务器端可扩展性并愿意接受更多复杂性,那么您需要使用Response.BeginFlush
进行探索。我相信异步写入是在.Net 4.5中引入的。这是一个可以帮助您入门的链接:
http://www.slideshare.net/pragyanshis/asynchronous-reading-and-writing-http-r-equest
我正在尝试探索这两种方法来做我的"做"我自己申请的清单......