热门资讯更多>>
- 05-03[网站建设]关于IE6下绝对定位…
- 11-23[网站建设]jquery 做TABS切换…
- 02-13[网站建设]——dopostback缺…
- 07-14[网站优化]如何修改网站标题…
- 11-13[网站建设]SQLSERVER2005 数…
- 09-25[网站建设]屏蔽 Flash 右键的…
- 03-13[网站建设]Windows+ IIS 的手…
- 03-22[网站建设]谈谈如何利用网络…
- 03-04[网站建设]magento整合WORDP…
- 02-07[网站建设]MSSQL备份移植到另…
自定义文件下载支持断点续传(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
''/////////////////////
%>
-------------------------转贴请注名出处-------------------------------