2009-11-17 19 views
0

我有ASP.NET應用程序,它允許用戶在輸入密碼時下載文件。我用下面的代碼將文件發送給用戶:如何優化ASP.NET中的文件下載?

Context.Response.Clear(); 
Context.Response.ContentType = "application/pdf"; 
Context.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName); 
Context.Response.BinaryWrite(File.ReadAllBytes(fileName)); 
Context.Response.Flush(); 
Context.Response.Close(); 

的問題是,下載變得如果文件大於1MB或多個用戶在同一時間下載文件的詳細很慢。以某種方式優化代碼以獲得更好的性能?

回答

2

您可以使用的Response.TransmitFile(/* Your file */);代替Response.BinaryWrite(/* Your file */);

的的TransmitFile() - 方法,而不將其存儲在內存中的數據寫入到HTTP輸出流。

+0

TransmitFile解決了這個問題! – Tomas 2009-11-18 06:16:44

1

你爲什麼要手動管理下載?爲什麼不直接在成功登錄後顯示的頁面上放置適當PDF文件的鏈接?這將釋放ASP.NET線程,因此您不用它們來管理文件下載。 IIS仍然需要爲它們提供服務,但我認爲它會顯着降低您的開銷。

你擔心文件名被曝光嗎?如果是這樣,請回復 - 還有其他一些可供選擇的選項。

+0

的確,如果我在服務器上提供文件的直接鏈接,則可以在用戶帳戶之外複製和訪問文件URL。 – Tomas 2009-11-17 14:27:43