自定义文件下载支持断点续传(HTTP_RANGE Adodb.Stream)

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

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: 找不到相异处

通常想实现用户登录后,才可以下载某此文件,可以用cookies和session来解决用户是否登录,然后根据cookies和session里面记录的值来确定是否给予下载。但是这样做有一个缺点:如果别人知道那个文件的路径,在IE中直接输入路径地址就可以下载了,这样的结果并不是我们想要的。
首先,我们要将保存文件的那个文件夹名字前加上#,为了防止从IE中下载此文件。
index.html文件(用来提供下载)
<a href="down.asp?u=789.rar">下载</a>

down.asp
<!--#include file="download.asp"-->
<%
Dim u
u=request.querystring("u")
downloadFile "./#soft/123.rar", u
%>

download.asp
<%
''author : lael 2006-2-20
function downloadFile(downfile, downname)
on error resume next

dlfile = server.MapPath(downfile)

Response.Buffer = True
Response.Clear

Set oStream = Server.CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1

Set fso = Server.CreateObject("Scripting.FileSystemObject")
if not fso.FileExists(dlfile) then
      set fso = nothing 
   oStream.Close
      Set oStream = nothing 
   downloadFile = "error:1"
   exit function
end if
Set ofile = fso.GetFile(dlfile)
filesize = ofile.size

oStream.LoadFromFile(dlfile)
if err then  
   err.clear
   set ofile = nothing
      set fso = nothing
   oStream.Close
      Set oStream = nothing
   downloadFile = "error:2"
   exit function
end if

Response.AddHeader "Content-Disposition", "attachment; filename=" & downname
Response.AddHeader "Content-Length", filesize
Response.CharSet="UTF-8"
Response.ContentType="text/plain"

Response.BinaryWrite oStream.Read
Response.Flush

set ofile = nothing
set fso = nothing
oStream.close
Set oStream = nothing

downloadFile = ""

end function

''/

%>



from:http://www.xmui.cn/html/jishuwenzhai/wangzhanjianshe/828.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值