当前位置: 首页 > 图文教程 > 网络编程 > ASP > 让自定义文件下载支持断点续传

ASP
ASP基础讲座(下)
解决IIS5 HTTP500内部错误
ASP 3.0高级编程(四十六)
ASP 3.0高级编程(四十五)
ASP 3.0高级编程(四十四)
ASP 3.0高级编程(四十三)
ASP 3.0高级编程(四十二)
ASP 3.0高级编程(四十一)
ASP 3.0高级编程(三十九)
ASP 3.0高级编程(三十八)
ASP 3.0高级编程(三十七)
ASP 3.0高级编程(三十六)
ASP 3.0高级编程(三十五)
ASP 3.0高级编程(三十四)
ASP 3.0高级编程(三十三)
ASP 3.0高级编程(三十二)
ASP 3.0高级编程(三十一)
ASP错误代码说明
jscript错误代码及相应解释大全
ASP错误处理

ASP 中的 让自定义文件下载支持断点续传


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 40 ::
收藏到网摘: n/a

  自定义文件下载基本上用在以下几处

1.浏览器已知类型,如Avi,Doc等如果本地安装了关联程序就会自动在浏览器上打开
2.权限管理,有时候不是所有的人都允许下载,所以需要在下载的时候进行判断
3.经常需要将特殊文件搁到虚拟目录访问不到的地方,以及asp和asa等文件的下载

大家经常用的是Adodb.Stream,但这时就有个缺陷,就是不支持断点续传了。
经常看到flashget中是红脸(即不支持断点续传)其实支持断点续传也很简单。如下:
利用读取HTTP_RANGE,然后对Adodb.Stream进行定位,然后再输出
(原来代码中本来还有Content-Length的设置,理论上应该有,但实践上可省去)

function dl(f,n)
on error resume next
Set S=CreateObject("Adodb.Stream")
S.Mode=3
S.Type=1
S.Open
S.LoadFromFile(f)
if Err.Number>0 then
  Response.Status="404"
else
  Response.ContentType="application/octet-stream"
  Response.AddHeader "Content-Disposition:","attachment; filename=" & n
  Range=Mid(Request.ServerVariables("HTTP_RANGE"),7)
  if Range="" then
   Response.BinaryWrite(S.Read)
  else
   S.position=Clng(Split(Range,"-")(0))
   Response.BinaryWrite(S.Read)
  End if
end if
Response.End
end function

call dl(Server.MapPath("c.avi"),"c.avi")


这时候你会看到红脸变笑脸了,一般用在大文件的下载

本地FlashGet测试通过,并用fc比较下载后的文件和原先的文件
FC: 找不到相异处