asp中自定义文件下载

下载

 可以用流下载(耗内存,少用)或直接转到该文件.
<%

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=Nothing

EndFunction

SubOutputErr(s_ErrMsg)
   Response.Write"<fontcolor=red>"&s_ErrMsg&"</font>"
   Response.End
EndSub

%>

http://www.cnblogs.com/jiny-z/archive/2006/08/29/489102.html

时间: 2024-08-11 18:25:24

asp中自定义文件下载的相关文章

如何在ASP+中使用自定义的PAGELET

asp+ asp+ 中提供了一种类似xml 的 代码描写方法,例如<asp:label id=test runat=server> 在本篇文章里 我会给大家描述一下 如何 编写自己的pagelet 例如:<asp888:myTestMenu 首先我们写一个aspc 文件,这个文件必须在aspx 文件中进行引用 <%@ Page Language="vb" %> <%@ Import Namespace="System.Drawing&quo

ASP.Net中自定义Http处理及应用之HttpModule篇

asp.net HttpHandler实现了类似于ISAPI Extention的功能,他处理请求(Request)的信息和发送响应(Response).HttpHandler功能的实现通过实现IHttpHandler接口来达到.而HttpModule实现了类似于ISAPI Filter的功能.   HttpModule的实现HttpModules实现了类似于ISAPI Filter的功能,在开发上,通常需要经过以下步骤: 1.编写一个类,实现IhttpModule接口 2.实现Init 方法,

ASP中实现的URLEncode、URLDecode自定义函数_应用技巧

在做ajax中的post时,发现在服务器端取得数据时总是乱码,网上看了些解决方法也搞不定,我post过去时是xml形式,由于乱码服务器端xml也解析不了或出错.于是在post前先把它编码,到服务器端再解码,这样问题解决了,但是要是数据很大时估计会很影响速度. 虽然ASP中的request会自动解码经过url编码的字符串,但是Request.BinaryRead(Request.TotalBytes)取得post数据时却不会解码,所以要进行解码. 下面是我找到的一个ASP中server.urlen

ASP中实现的URLEncode、URLDecode自定义函数

在做ajax中的post时,发现在服务器端取得数据时总是乱码,网上看了些解决方法也搞不定,我post过去时是xml形式,由于乱码服务器端xml也解析不了或出错.于是在post前先把它编码,到服务器端再解码,这样问题解决了,但是要是数据很大时估计会很影响速度. 虽然ASP中的request会自动解码经过url编码的字符串,但是Request.BinaryRead(Request.TotalBytes)取得post数据时却不会解码,所以要进行解码. 下面是我找到的一个ASP中server.urlen

让自定义文件下载支持断点续传(HTTP

ado|stream|下载 自定义文件下载基本上用在以下几处 1.浏览器已知类型,如Avi,Doc等如果本地安装了关联程序就会自动在浏览器上打开2.权限管理,有时候不是所有的人都允许下载,所以需要在下载的时候进行判断3.经常需要将特殊文件搁到虚拟目录访问不到的地方,以及asp和asa等文件的下载 大家经常用的是Adodb.Stream,但这时就有个缺陷,就是不支持断点续传了.经常看到flashget中是红脸(即不支持断点续传)其实支持断点续传也很简单.如下:利用读取HTTP_RANGE,然后对A

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

自定义文件下载基本上用在以下几处 1.浏览器已知类型,如Avi,Doc等如果本地安装了关联程序就会自动在浏览器上打开2.权限管理,有时候不是所有的人都允许下载,所以需要在下载的时候进行判断3.经常需要将特殊文件搁到虚拟目录访问不到的地方,以及asp和asa等文件的下载 大家经常用的是Adodb.Stream,但这时就有个缺陷,就是不支持断点续传了.经常看到flashget中是红脸(即不支持断点续传)其实支持断点续传也很简单.如下:利用读取HTTP_RANGE,然后对Adodb.Stream进行定

asp.NET自定义服务器控件内部细节

如大家要转载,请保留本人的版权:/* *Description:asp.NET自定义服务器控件内部细节系列教程*Auther:崇崇-天真的好蓝 *MSN:chongchong2008@msn.com *Dates:2007-05-20*Copyright:ChongChong2008 YiChang HuBei China */ 关于自定义asp.NET自定义服务器控件文章和源码示例网上已经很多了,不过有些内部些节方面,让一些初次接触这方面技术的朋友难以理解,对服务器控件的方方面面也很疑惑.为此

如何在ASP中浏览和修改Cookies集合

cookie|cookies|集合 Cookies的值比ASP其他集合(例如Form和ServerVariables)的值要复杂得多.Cookie是一小块由浏览器存贮在客户端系统上的文本,且随同每次请求发往它们应用于的域中的服务器. ASP使得应用cookie较为容易,可以从Request对象的Cookies集合中获得所有随同请求发出的cookie值,并可创建或修改cookie,通过Response对象的Cookies集合发回给用户. Cookie包含可用两种方式构造的信息,单值cookie提供

在ASP中利用“正则表达式” 对象实现UBB风格的论坛

ubb|对象|正则 上一次,我们谈到在ASP中如何利用"正则表达式"对象来实现各种数据的校验,文中描述了正则表达式对象的强大功能,接下来,我们来看看有关"正则表达式"对象的其他功能.当我们在网上冲浪的时候,尤其是浏览各类论坛的时候,经常会见到"UBB代码"这个词语.什么是UBB代码呢?UBB代码是HTML的一个变种http://www.alixixi.com/program/a/,是Ultimate Bulletin Board (国外一个BBS