当前位置:首页 > 文章 > 正文
利用adodb.stream直接下载任何后缀的文件(防盗链)
作者:佚名 | 来源:网络转摘 | 时间:2006-06-01 | 阅读权限:游客 | 会员币:0 | 【
在浏览器的地址栏里直接输入一个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://www.webjx.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
  就能够很好的防止别人的盗链了。
文章录入:admin | 浏览次数:
上篇文章:关于ASP的(VBScript)类
下篇文章:17种正则表达式
相关评论(以下网友评论只代表其个人观点,不代表花香盈路的观点或立场)
Open LoginBar
关闭此窗口