2009-07-21 55 views
1

我有一個網頁,我可以選擇將表單數據導出爲PDF。我在運行時創建PDF並將PDF存儲在我的應用程序目錄下的「PDF」文件夾中。在創建帶SessionID名稱的PDF後,我將調用以下函數以在新的瀏覽器窗口中顯示PDF文件:從ASP.Net中刪除應用程序臨時文件

ResponseHelper.Redirect(Response,「〜/ PDF /」+ Session.SessionID +「.pdf」,「 _Blank「,」「);

此PDF包含與登錄用戶相關的私人信息。因此,我想要一種方式來刪除此PDF文件,一旦它在瀏覽器中顯示給用戶。這是因爲IIS服務器允許整個開發團隊查看此安全風險的文件夾,並且我們不能禁止用戶在服務器上查看此文件夾。

因此,如果我一旦在瀏覽器中加載該文件,就可以解決此安全風險。

任何人都可以建議一些更好的方式刪除這個文件,只要possbile從應用程序?

感謝, 普利文

回答

0

一種方式是寫一個流的PDF瀏覽器一個ASHX處理程序,然後將其刪除完成時。

另一種更好的方法是在內存中簡單地構建PDF(不使用會話)並在其準備就緒時進行流式傳輸。

UPDATE

我用iTextSharp的略加修改的版本這樣做。基本上,iTextSharp在內存中執行了它的所有操作,然後將文件保存到磁盤。我改變了這個返回內存流。所有的代碼已經在那裏,它只是一兩行不得不改變。

然後,我使用response.binarywrite將流直接推送到瀏覽器。中提琴!磁盤上沒有文件。

ashx處理程序就像一個aspx頁面,只有一個入口點,並且不會處理所有的頁面處理垃圾。它的重量輕,並通過response.write調用回到瀏覽器。

+0

我正在使用iText創建PDF。那麼是否有可能從它流中傳輸PDF而不將其保存在磁盤上?你能否提供一些示例代碼或任何鏈接來理解它。 – user423574 2009-07-21 05:15:04

+0

你使用的是iText還是一個端口(例如iText.Net,iTextSharp)? – MyItchyChin 2009-07-21 05:37:21

1

什麼,我猜是要創建在利用iText運行PDF文件,然後保存該PDF文件在臨時目錄中展示給用戶......你爲什麼不使用

Response.WriteFile(PDFFILE );

這會將整個文件寫入流中,而不將其保存在臨時文件夾中。

相關問題