2011-04-15 93 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