我有一个WebPage,我可以选择将表单数据导出为PDF。我在运行时创建PDF并将PDF存储在我的应用程序目录下的“PDF”文件夹中。使用SessionID名称创建PDF后,我调用以下函数在新浏览器窗口中显示PDF文件:
ResponseHelper.Redirect(响应,“〜/ PDF /”+ Session.SessionID +“。pdf”,“_ Blank”,“”);
此PDF包含与登录用户相关的私人信息。因此,我希望有一种方法可以在浏览器中向用户显示该PDF文件后将其删除。这是因为IIS服务器允许整个开发团队查看此文件夹,这是一个安全风险,我们不能禁止用户在服务器上查看此文件夹。
因此,如果我在浏览器中加载此文件后立即将其删除,则可能是此安全风险的解决方案。
有人可以尽快建议一些更好的方法来删除此文件吗?
谢谢, 普利文
答案 0 :(得分:1)
我猜您是在运行时使用Itext创建PDF文件,然后将该PDF文件保存在临时目录中以向用户显示...为什么不使用
Response.WriteFile(PDFFILE);
这将在流上写入整个文件而不将其保存在临时文件夹中。
答案 1 :(得分:0)
一种方法是编写一个ashx处理程序,将pdf流式传输到浏览器,然后在完成后将其删除。
另一种更好的方法是简单地在内存中构建PDF(不使用会话),并在准备就绪后立即流式传输。
<强>更新强>
我正在使用稍微修改过的iTextSharp版本。基本上,iTextSharp在内存中执行了所有操作,然后将文件保存到磁盘。我改变了这个以返回内存流。所有的代码都已经存在,它实际上只是一两行必须改变。
然后,我使用response.binarywrite将流直接推送到浏览器。中提琴!磁盘上没有文件。
ashx处理程序就像一个aspx页面,只有一个入口点,并没有完成所有的页面处理垃圾。它重量很轻,并通过response.write调用与浏览器通信。