如何做成象上海热线下载的功能?

jacobzhang 2005-09-22 03:18:08
我看过了一些c#的代码,但是我是使用vb.net,所以请教代码。要达到的目标是:用户点击一个Hyperlink,弹出一个对话框,上面有 open,save,cancel三个按钮。我现在的代码是:
Dim DownloadFile As IO.FileInfo = New IO.FileInfo("E:\AutoPodcasting\" & tmpEncodeTitle & ".wav")
Response.Clear()
Response.ClearHeaders()
Response.Buffer = False
Response.ContentType = "application/octet-stream"
Response.AppendHeader("Content-Disposition", "attachment;FileName=" & HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.UTF8))
Response.AppendHeader("Content-Length", DownloadFile.Length)
Response.WriteFile(DownloadFile.FullName)
Response.Flush()
Response.End()
一直提示我找不到文件,我试着修改了路径,可是又提示我Response.AppendHeader出错。请指教

...全文
97 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jacobzhang 2005-09-22
  • 打赏
  • 举报
回复
好了,解决了,现在还有一个问题:用户使用客户端的网页来下载文件,我想要在客户端使用cookie,当用户第一次下载的时候会弹出对话框来选择一个保存路径,我要作的是把这个路径存到cookie里面,以后用户下载的时候自动弹出上次选择的路径。请问怎么实现?这个技术是在客户端的网页实现的。
  • 打赏
  • 举报
回复
Response.AppendHeader("Content-Disposition", _
"attachment;FileName=" & DownloadFile.FullName)

就可以了。
  • 打赏
  • 举报
回复
解决服务器资源浪费问题,并且在客户端放弃是立即中止下载文件,还有你说的所谓decode问题(本不应该如此),不应该使用 response.writefile,应该使用 response.outputstream.write,并且分块(例如6K字节为一块)下载,下载过程中要随时判断 isClientConnected。

解决多线程断点序传,要判断客户端的请求头重的Range信息,从指定的位置开始下传,并且输出的时候要(增加一个参数)通知客户端数据的起点。
jacobzhang 2005-09-22
  • 打赏
  • 举报
回复
Response.AppendHeader("Content-Disposition", "attachment;FileName=" & HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.UTF8))

这里出错,因为我下载的音频文件,所以运行到此处,全是乱码。
  • 打赏
  • 举报
回复
改自你的代码:

Dim DownloadFile As IO.FileInfo = New FileInfo("你的文件")
Response.Clear()
Response.ContentType="application/octet-stream"
Response.addheader("Content-Disposition", "attachment;FileName=" & _
HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.UTF8))
Response.addheader("Content-Length", DownloadFile.Length)
Response.WriteFile(DownloadFile.FullName)
Response.End()

但是你要注意,这种下载文件方法(就像asp.net默认的上传文件方法一样)不适合大文件,大文件下载过程中一旦取消、会造成服务器暂时死机,即使正常下载大文件也会造成服务器资源极度浪费。另外最严重的是不支持多线程断点序传。
TonyTonyQ 2005-09-22
  • 打赏
  • 举报
回复
建議加上文件檢查代碼,修改如下:

Dim FileName as string="E:\AutoPodcasting\" & tmpEncodeTitle & ".wav"
If File.Exists(FileName) Then
Dim DownloadFile As IO.FileInfo = New IO.FileInfo(FileName)
Response.Clear()
... 'Your codes

End If
jacobzhang 2005-09-22
  • 打赏
  • 举报
回复
我发现了原因,需要对客户端传给我的文件名进行urldecode转换一下。
TonyTonyQ 2005-09-22
  • 打赏
  • 举报
回复
上面代碼沒有錯,可以用,請確認對應的文件是否存在,應該是文件不錯在或者路徑不正確引起的錯誤。
調試的時候,注意DownloadFile是否正確。
jacobzhang 2005-09-22
  • 打赏
  • 举报
回复
另外说明一下,我的文件是wav格式的音频文件,不是text文件

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧