日期:2011-10-26 浏览次数:21180 次
<%
ConstUSE_STREAM=0'0.不用流(Adodb.Stream)下载1.用流下载
ConstALLOW_FILE_EXT="rar,zip,chm,doc,xls,swf,mp3,gif,jpg,jpeg,png,bmp"'允许下载的文件的扩展名,防止源代码被下载
DimsDownFilePath'下载文件路径
sDownFilePath=Trim(Request("FilePath"))
'或者根据传过来的文件ID从数据库中获取文件路径
'如果sDownFilePath为绝对路径,一定要将sDownFilePath转换为相对本文件的相对路径
'sDownFilePath="focus.swf"
CallDownloadFile(sDownFilePath)
FunctionDownloadFile(s_DownFilePath)
'判断有没传递文件名
IfIsNull(s_DownFilePath)=TrueOrTrim(s_DownFilePath)=""Then
OutputErr"错误:先确定要下载的文件,下载失败"
EndIf
'判断扩展名是否合法
Dims_FileExt
s_FileExt=Mid(s_DownFilePath,InstrRev(s_DownFilePath,".")+1)
IfInStr(","&ALLOW_FILE_EXT&",",","&s_FileExt&",")<=0Then
OutputErr"错误:文件类型("&s_FileExt&")不允许被下载,下载失败"
EndIf
s_DownFilePath=Replace(s_DownFilePath,"","/")
'为了安全,某些目录禁止下载文件,在这里处理
'
'检测服务器是否支持fso
Dimo_Fso
OnErrorResumeNext
Seto_Fso=Server.CreateObject("Scripting.FileSystemObject")
IfErr.Number<>0Then
Err.Clear
OutputErr"错误:服务器不支持fso组件,下载失败"
EndIf
'取得文件名,文件大小
Dims_FileMapPath
Dimo_File,s_FileName,n_FileLength
s_FileMapPath=Server.MapPath(s_DownFilePath)
If(o_Fso.FileExists(s_FileMapPath))=TrueThen
Seto_File=o_Fso.GetFile(s_FileMapPath)
s_FileName=o_File.Name
n_FileLength=o_File.Size
o_File.Close
Else
OutputErr"错误:文件不存在,下载失败"
EndIf
Seto_Fso=Nothing
'判断是否下载的文件大小超过限制
'
'如果不是用流下载,直接转到该文件
IfUSE_STREAM=0Then
Response.RedirectsDownFilePath
Response.end
EndIf
'检测服务器是否支持Adodb.Stream
OnErrorResumeNext
Seto_Stream=Server.CreateObject("Adodb.Stream")
IfErr.Number<>0Then
Err.Clear
OutputErr"错误:服务器不支持Adodb.Stream组件,下载失败"
EndIf
o_Stream.Tyep=1
o_Stream.Open
o_Stream.LoadFromFiles_FileMapPath
Response.Buffer=True
Response.Clear
Response.AddHeader"Content-Disposition","attachment;filename="&s_FileName
Response.AddHeader"Content-Length",n_FileLength
Response.CharSet="UTF-8"
Response.ContentType="application/octet-stream"
Response.BinaryWriteo_Stream.Read
Response.Flush
o_Stream.Close
Seto_Stream=Not