2013-03-25 81 views
0

我有一個要求,使文件服務器中的文件可以通過運行在Web服務器上的應用程序進行下載。用戶將點擊應用程序頁面上的可用鏈接,並出現另存爲對話框。這種用例很常見,我可能會談論一些基本的東西,但如果有人能確認我的下列假設是否正確,我將不勝感激。ASP.NET - 流文件到客戶端佔用服務器內存嗎?

1)通過文件服務器上的文件,通過Web服務器中的虛擬目錄虛擬映射以便應用程序可以訪問(作爲鏈接),可以使用內容處置直接將其流式傳輸到客戶端(使用代碼類似於回答here),意思是不涉及任何代碼來處理或分塊文件以用於流式傳輸。

2)由於文件是從文件服務器直接流式傳輸的,因此Web服務器在內存或磁盤使用方面(當然會使用CPU)都不受影響。

感謝

+0

這取決於如何流數據。該答案中顯示的方法會在文件傳輸時影響內存,因爲所有字節都在內存中讀取。顯示你正在使用的代碼會有所幫助。 – nunespascal 2013-03-25 07:02:06

+0

我還沒有編寫任何代碼,但打算在我共享的鏈接中使用類似的模式顯示。實際上,我正在尋找一種方法,在文件從文件服務器下載時,不會干擾Web服務器上的內存和磁盤使用情況。你確定代碼會佔用「Web服務器」內存嗎?那令我驚訝。我的理解是,因爲它直接從文件服務器流式傳輸,它可能不佔用內存或者麻煩Web服務器磁盤。感謝並感謝您的回答。 – Lalman 2013-03-25 07:28:40

+0

實際上,我共享的鏈接使用本地「web服務器」中的文件,但在我的情況下,我打算指向一個虛擬目錄,該目錄又指向一個文件服務器。在這種情況下,文件服務器磁盤使用量可能會增加(並且可能不是內存),但Web服務器磁盤或內存不會受到影響嗎?謝謝 – Lalman 2013-03-25 07:30:36

回答

2

既然你想直接寫入文件,讓你的內存佔用量降至最低,可以考慮使用HttpResponse.TransmitFile

直接寫入指定的文件到一個HTTP響應輸出流, 無緩衝它在記憶中。

這對我來說是最有效的方法來發送響應文件,如果你必須通過asp.net寫它。

Response.AppendHeader("Content-Disposition", "attachment; filename="+ fileName); 
Response.TransmitFile(fullPath); 
Response.Flush(); 
Response.End(); 
+0

這正是我想要做的。謝謝nunespascal! – Lalman 2013-03-25 16:49:13

相關問題