2011-04-15 102 views
1

我正在使用以下代碼來允許用戶下載文件。在VB.net中下載文件

Dim myFile As FileInfo = New FileInfo(strPath & strFile) 
Response.AddHeader("Content-Disposition", "attachment; filename=" & _ 
Replace(myFile.Name, ".resources", "")) 
Response.AddHeader("Content-Length", myFile.Length.ToString()) 
Response.ContentType = "application/octet-stream" 
Response.WriteFile(myFile.FullName) 

此方法有一個令人討厭的問題,即此行之後的任何代碼都無法正確執行。

它很古老的代碼,所以我猜這些日子可能有更好的方法來做到這一點。任何人都可以推薦一個

+0

請確保清除您的回覆。 – 2011-04-15 13:12:47

+0

爲什麼我在這裏被標記。這似乎是一個相當明確表達和公平的問題。 – Urbycoz 2011-04-16 20:40:58

回答

3

是的,Response.WriteFile完成後終止響應,所以我想象你會得到一個ThreadAbortException。如果你想將文件寫入響應並繼續執行代碼,我建議使用以下2個選項之一:

  1. 變化從WriteFileBinaryWrite。使用StreamReader將文件內容轉換爲字節數組,然後使用BinaryWrite將該數據寫入響應。這不會結束響應,您可以繼續使用其他代碼。
  2. 推遲WriteFile,直到執行其他「等待」代碼。然後返回到該行代碼來完成交易。
+0

+1:肯定比我完全沒有通過第一遍正確讀取代碼要好:) – David 2011-04-15 13:14:30

+0

@David:Huzzah :) – 2011-04-15 13:15:46

+0

謝謝。僅供參考我實際上沒有收到任何錯誤。寫入文件後的代碼似乎不起作用。我會嘗試這種新方法。 – Urbycoz 2011-04-15 14:03:07