【问题标题】:Download a file in VB.net在 VB.net 中下载文件
【发布时间】:2011-08-06 08:02:05
【问题描述】:

我正在使用以下代码来允许用户下载文件。

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)

这个方法有个烦人的问题,就是这行之后的代码都不能正确执行。

这是相当古老的代码,所以我猜现在可能有更好的方法来做到这一点。谁能推荐一个?

【问题讨论】:

  • 确保你清理了你的回复。
  • 为什么我被标记在这里。对我来说,这似乎是一个表达得非常清楚和公平的问题。

标签: .net vb.net .net-3.5


【解决方案1】:

是的,Response.WriteFile 会在响应完成后终止响应,所以我想你会得到一个ThreadAbortException。如果您想编写文件以响应并继续执行代码,我建议使用以下 2 个选项之一:

  1. WriteFile 更改为 BinaryWrite。使用 StreamReader 将文件的内容获取到字节数组中,并使用 BinaryWrite 将该数据写入响应。这不会结束响应,您可以继续使用其他代码。
  2. WriteFile 推迟到执行其他“等待”代码之后。然后返回该行代码完成交易。

【讨论】:

  • +1:绝对比我在第一次通过时完全无法正确阅读代码要好:)
  • 谢谢。仅供参考,我实际上没有收到任何错误。 writefile 之后的代码似乎没有生效。我会试试这个新方法。
  • 我无法让 (1) 工作。它似乎只是写入页面,而不是提供下载弹出窗口。似乎应用(2)并没有什么不同。如果我在writeFile之前或之后写lbl.text="hi",还是不生效。
  • 哦,好的,我明白你的问题了。在这种情况下,您对响应本身有一个根本的误解。您不能同时执行这两个操作。每页有一个请求和一个响应。如果您将响应设置为下载文件,那就是您所能做的。您不能随后从同一响应修改页面。您可能已经在网络上看到了模仿此类操作的行为,但这些方法使用多个请求/响应操作(通常使用 AJAX)来实现结果。在这种情况下,您可以下载文件或更改标签,但不能同时下载。
  • @Joel:感谢您发现问题。我觉得我错过了一些明显的东西。好像我是。
猜你喜欢
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
相关资源
最近更新 更多