使用asp下的adodb.stream 下载文件而不是打开

在浏览器的地址栏里直接输入一个doc或xls或jpg的文件的url路径,那么该文件会直接显示在浏览器里。而在很多时候我们希望能直接弹出下载提示框让用户下载,我们该怎么办呢?这里有两种方法: 
1、设置你的服务器的iis,给doc等后缀名做映射。
2、在向客户端发送时设置其contenttype。 
下面详细说明方法2 
程序代码: 


代码如下:

<%
Response.Buffer = true
Response.Clear

dim url
Dim fso,fl,flsize
dim Dname
Dim objStream,ContentType,flName,isre,url1
'*********************************************调用时传入的下载文件名
Dname=trim(request("n"))
'******************************************************************
If Dname<>"" Then
'******************************下载文件存放的服务端目录
 url=server.MapPath("/")&"\"&Dname
'***************************************************
End If

Set fso=Server.CreateObject("Scripting.FileSystemObject")
 Set fl=fso.getfile(url)
 flsize=fl.size
 flName=fl.name
 Set fl=Nothing
 Set fso=Nothing
%>
<%
 Set objStream = Server.CreateObject("ADODB.Stream")
 objStream.Open
 objStream.Type = 1
 objStream.LoadFromFile url

Select Case lcase(Right(flName, 4))
  Case ".asf"
   ContentType = "video/x-ms-asf"
  Case ".avi"
   ContentType = "video/avi"
  Case ".doc"
   ContentType = "application/msword"
  Case ".zip"
   ContentType = "application/zip"
  Case ".xls"
   ContentType = "application/vnd.ms-excel"
  Case ".gif"
   ContentType = "image/gif"
  Case ".jpg", "jpeg"
   ContentType = "image/jpeg"
  Case ".wav"
   ContentType = "audio/wav"
  Case ".mp3"
   ContentType = "audio/mpeg3"
  Case ".mpg", "mpeg"
   ContentType = "video/mpeg"
  Case ".rtf"
   ContentType = "application/rtf"
  Case ".htm", "html"
   ContentType = "text/html"
  Case ".txt"
   ContentType = "text/plain"
  Case Else
   ContentType = "application/octet-stream"
  End Select

Response.AddHeader "Content-Disposition", "attachment; filename=" & flName
  Response.AddHeader "Content-Length", flsize

Response.Charset = "UTF-8"
  Response.ContentType = ContentType

Response.BinaryWrite objStream.Read
  Response.Flush
  response.Clear()
 objStream.Close
 Set objStream = Nothing
%>

将下面的东西存成download.asp然后你就可以用<a herf="http://xxx.xxx.com/download.asp?n=file.doc">download!</a>来下载同一目录下的file.doc了!

但是这里有个问题就是直接将file.doc路径写在url里是不安全的,所以解决方案应该是将file.doc的路径存到数据库里,同过查找数据库后得到路径

在这个程序的最前面如果加上一个判断: 
if instr(Request.ServerVariables("HTTP_REFERER"),"http://你的域名")=0 then 
      Response.End 
end if 
就能够很好的防止别人的盗链了.

(0)

相关推荐

  • JScript中使用ADODB.Stream判断文件编码的代码

    一开始使用ASCII编码来读取文本数据,模拟读取二进制数据,但是发现如果字符编码大于127时,只会得到小于128的值,相当于和128取余了,因此ASCII编码是不行的. 继续寻找,在CodeProejct.com找到一篇文章<Reading And Writing Binary Files Using JScript>,里面刚好有我需要的内容. 其实说来也简单,就是把编码换一下,使用437,这个是IBM扩展过的ASCII编码,把ASCII编码的最高位也利用起来,将字符集中的字符从128个扩展到

  • 用ADODB.Stream转换

    用ADODB.Stream转换,用streamtochar这个函数 <HTML> <html> <head> <META http-equiv="Content-Type" content="text/html; charset=Big5"> <title>test</title> <SCRIPT LANGUAGE="JavaScript"> <!-- wi

  • ADODB.Stream组件Charset属性值集合

    翻了半天MSDN后找到的,|后边是别名 复制代码 代码如下: ANSI_X3.4-1968|iso-8859-1  ANSI_X3.4-1986|iso-8859-1  arabic|iso-8859-6  ascii|iso-8859-1  ASMO-708  Big5  chinese|gb2312  CN-GB|gb2312  cp1256|windows-1256  cp367|iso-8859-1  cp819|iso-8859-1  cp852|ibm852  cp866|ibm86

  • windows2008+iis7无组件上传写入文件失败ADODB.Stream 错误 800a0bbc问题

    现象:写入文件失败,ADODB.Stream 错误 800a0bbc 条件:在已排除一般的解决方法文件夹权限后,并且服务器为windows2008 希望写这文章可以让大家避免浪费太多时间,最快地解决问题. 一个ASP程序用到无组件上传,在本地XP SP3 IIS5.1及在Windows Server 2003 + IIS6.0上测试均为可以正常上传.到把程序放了windows2008+IIS7.0上发现内部服务器错误500,最后我把其调为可显示详细错误信息,显示为: 写入文件失败,ADODB.S

  • asp下用ADODB.Stream代替FSO读取文本文件

    '文件内容读取. 复制代码 代码如下: Function LoadFile(ByVal File) Dim objStream On Error Resume Next Set objStream = Server.CreateObject("ADODB.Stream") If Err.Number=-2147221005 Then Response.Write "<div align='center'>非常遗憾,您的主机不支持ADODB.Stream,不能使用本

  • 利用MSXML2.XmlHttp和Adodb.Stream采集图片

    利用MSXML2.XmlHttp和Adodb.Stream 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml">  <

  • asp adodb.stream对象的方法/属性

    adodb.stream对象的方法/属性 Cancel 方法      使用方法如下      Object.Cancel      说明:取消执行挂起的异步 Execute 或 Open 方法的调用. Close  方法      使用方法如下      Object.Close      :关闭对像 CopyTo 方法      使用方法如下      Object.CopyTo(destStream,[CharNumber])      说明:将对像的数据复制,destStream指向要复

  • adodb.stream读文件到数组的代码

    Function filenum(filename,i) Dim st,s  Set st= CreateObject("ADODB.Stream") st.Type = 2 '流类型为文本 st.Mode = 3 '模式为读写 st.Open st.LineSeparator=13  st.LoadFromFile filename Do While Not St.EOS  s = Split(st.readtext(), vbCrLf)    Loop  'MsgBox UBoun

  • exe2swf 工具(Adodb.Stream版)

    Exe2swf ,将exe 格式的 flash文件转为swf 格式.网上有很多这方面的工具,这个是用vbscript写的.用法: 将下面代码存为 exe2swf.vbs  将exe格式的flash拖放在此文件上,即可生成swf文件, 更新日期:2005-01-20 09:30 复制代码 代码如下: 'exe2swf工具, '用法:将exe格式的flash拖放在此文件上,即可生成swf文件, 'haiwa@http://www.51windows.Net '感谢jimbob提供帮助. dim As

  • 使用asp下的adodb.stream 下载文件而不是打开

    在浏览器的地址栏里直接输入一个doc或xls或jpg的文件的url路径,那么该文件会直接显示在浏览器里.而在很多时候我们希望能直接弹出下载提示框让用户下载,我们该怎么办呢?这里有两种方法:  1.设置你的服务器的iis,给doc等后缀名做映射. 2.在向客户端发送时设置其contenttype.  下面详细说明方法2  程序代码:  复制代码 代码如下: <% Response.Buffer = true Response.Clear dim url Dim fso,fl,flsize dim 

  • ASP下通过Adodb.Stream实现多线程下载大文件

    有个朋友 做 某种小众音乐交换站的(他们那个行业的昵图网),需要用到付费下载.尝试过 防盗链,不太理想,最终使用了 Adodb.Stream 读取,直接输出. 解决了 盗版的问题,但是新的问题又来了.Adodb.Stream 这种方式 电脑还好说,大部分电脑浏览器都支持.移动端 很多 浏览器为了 加速读取,会多线程下载导致 文件无法正常读取. 抓包,发现增加了 HTTP头 HTTP_RANGE.隐约记得 之前读过 王大(王洪影)的 <深入解析 ASP核心技术>当中提到ASP多线程下载的问题,回

  • asp之基于adodb.stream的文件操作类

    复制代码 代码如下: <% '************************************************************* '转发时请保留此声明信息,这段声明不并会影响你的速度! '************************************************************* '************************************************************* '@author:          

  • asp下利用xml打包网站文件

    这个方法可以把整个文件夹打包到xml文件中,把这个xml文件文件和解包文件放在一起后,运行解包文件就可以把原来的文件释放出来,这样我们就可以把网站打包上传到虚拟主机,再运行解包文件就可以了.我在本地测试之选择了少部分文件,不知在文件很多的情况执行效率如何.     其实实现的思路也很简单,主要利用的是xml文件可以存放二进制数据的原理.有兴趣的朋友可以下载下面的附件研究下!! 解包文件 复制代码 代码如下: <%@LANGUAGE="VBSCRIPT" CODEPAGE=&quo

  • 用java在web环境下上传和下载文件的技巧

    文件上传在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件上传功能. common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载. 用该组件可实现一次上传一个或多个文件,并可限制文件大小. 下载后解压zip包,将commons-fileupload-

  • ASP.NET实现从服务器下载文件问题处理

    假设在服务器的根目录下有个名为Download的文件夹,这个文件夹存放一些提供给引用程序下载的文件 public void DownloadFile(string path, string name){ try{ System.IO.FileInfo file = new System.IO.FileInfo(path); Response.Clear(); Response.Charset = "GB2312"; Response.ContentEncoding = System.T

  • asp下用fso生成js文件的代码

    <%sub fsojs()%>  <% Set fso= Server.CreateObject("Scripting.FileSystemObject") set fd=fso.createtextfile(server.MapPath("../category.js"),true) '开始操作 set rs=server.CreateObject("adodb.recordset") rs.Open "select

随机推荐