QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2407|回复: 0
打印 上一主题 下一主题

利用adodb.stream直接下载任何后缀的文件

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-11-5 22:59 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

在_blank>浏览器的地址栏里直接输入一个doc或xls或jpg的文件的url路径,那么该文件会直接显示在_blank>浏览器里。而在很多时候我们希望能直接弹出下载提示框让用户下载,我们该怎么办呢?这里有两种方法: 4 e3 y9 H( S* C1 L8 Z1 x* s1、设置你的服务器" target=_blank>服务器的iis,给doc等后缀名做映射( D6 e/ e; B, f. P 2、在向客户端发送时设置其contenttype

4 @2 m. l! Y) H1 Y- _

下面详细说明方法2

; ?4 T. m* u3 O% x3 v3 \

<% 0 @! X; \# F, ?( oResponse.Buffer = true 4 D9 v" o$ e' L) ZResponse.Clear

- y! t0 `! w9 H# f. o) u

dim url1 D1 `( a8 G# X5 ^ Dim fso,fl,flsize " @, o p. Q, s+ o# M ^8 @dim Dname& M Y9 l( R7 f5 X( g' }& @6 E Dim objStream,ContentType,flName,isre,url1 - M+ Q: f0 M* s'*********************************************调用时传入的下载文件名 ; y% z+ j! Y4 O8 ^2 J, J( n& sDname=trim(request("n")) 7 \0 q* T; r3 m: h, v3 ~! Y+ U'******************************************************************6 Z4 U: ~) } j: \# Z3 ?* ?1 {2 r If Dname<>"" Then 6 b9 R7 q1 F( o6 o4 Q'******************************下载文件存放的服务端目录 5 Y" c0 Z( }( D url=server.MapPath("/")&"\"&Dname , D) L6 g& F3 {- E2 n9 g; L- @: b4 n'***************************************************7 i( N5 h0 ]6 L4 ?. D End If

. _1 ^0 a3 s( N. E; R$ x- M% \* J+ V( M

Set fso=Server.CreateObject("Scripting.FileSystemObject") ( k' w6 \7 c+ ? Set fl=fso.getfile(url) * ~3 P0 ^1 c* M9 l1 |+ \# z# E flsize=fl.size8 F/ W3 c4 ?' ~6 F% u flName=fl.name! Q$ A8 |1 \: s0 A. ^# q4 A Set fl=Nothing , o5 T3 V& D7 S8 Z- E Set fso=Nothing, ~+ |; s+ J) b$ Z* Q0 K0 d %>4 D% ? Y( X. i: d# E5 I <% 8 z' `7 j2 H3 G5 W. {& O5 ? Set objStream = Server.CreateObject("ADODB.Stream") 3 K* i. [9 I' x objStream.Open* F# v9 N1 y5 {5 j+ @- R7 I2 Q# o objStream.Type = 1 v0 x! y; Z% R9 l) i objStream.LoadFromFile url

+ Z& x1 [0 F% F4 l, ]- n

+ M8 {# L/ b: I3 X' q- o Select Case lcase(Right(flName, 4)) ! N( F2 F$ Q; ?- {# }4 I Case ".asf") l8 x/ s: @. h( b, e ContentType = "video/x-ms-asf" 9 F E3 Z" y' j# b" ? Case ".avi"( m; \3 O/ h6 \0 f C ContentType = "video/avi" 6 w' [% A4 d+ r' h0 ` Case ".doc" 7 Q v6 U- S2 Y( M: l/ h8 P ContentType = "application/msword" : r* `7 o; p, b Case ".zip"+ n$ m! f" S5 z4 v) n( Y ContentType = "application/zip"& o4 ?6 x/ ^0 U Case ".xls"' M# n# K1 w1 L# X ContentType = "application/vnd.ms-excel"- q8 s6 w o. T9 m# v; ~' L Case ".gif"9 ]' a2 V Q' ]5 f1 m+ c ContentType = "image/gif" ' v/ P, e! ^' o S( ? Case ".jpg", "jpeg"" A* R- j2 e$ H/ H3 n ContentType = "image/jpeg" 3 j7 N( {% e! ^( ~/ ~ Case ".wav" , ^4 M& `1 @6 @2 u ContentType = "audio/wav" 0 D) ^6 @/ s. f# P Case ".mp3"& B# H' e( _ U: I$ k; i& l) _- b ContentType = "audio/mpeg3". W( n9 |! _' R; {1 Y! n Case ".mpg", "mpeg" - v- N& p; K: U5 k/ w ContentType = "video/mpeg"! s, y5 H' w y( J u) j7 u! O Case ".rtf" ! J) f/ \# D& i" m4 Q6 F ContentType = "application/rtf" % L* ~" ?9 C+ j: E2 ?7 I Case ".htm", "html". M1 ~; D( ^ z6 O ContentType = "text/html"0 V6 p6 q6 \' x% S9 C9 X Case ".txt" 4 y) t- N; l( E8 A ContentType = "text/plain"+ ^, f- P4 P$ r Case Else 5 o3 O) T# \: {2 b' W ContentType = "application/octet-stream"$ u# ]# M5 a; _: r" m: f End Select

2 N9 s9 q) k: H 9 Q( C5 s4 [+ I# |

Response.AddHeader "Content-Disposition", "attachment; filename=" & flName9 `. p9 }/ q% l4 A) v- { Response.AddHeader "Content-Length", flsize

' D$ k6 W( L0 g! q3 [1 ]! R) l

Response.Charset = "UTF-8"/ }8 X/ V- l2 y( w Response.ContentType = ContentType

; o( `4 O6 k% Y# t+ A

Response.BinaryWrite objStream.Read; J5 X, H, K" c& W. f/ a Response.Flush $ D0 d I n& [6 ~ response.Clear() ) N8 w9 Z& ^! S/ ^+ @ m objStream.Close % M( r: q$ ?+ ^5 W Set objStream = Nothing

8 C) l2 M% K- \1 n; f# b4 m1 h9 d8 {

%>

! @; w: A- G# f5 c4 N

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

" j, o+ L/ M& j# T" n. ]" k

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

* i1 V( n1 Z( H5 _8 A$ W( u) _4 H5 `

在这个程序的最前面如果加上一个判断:

7 e+ y+ o6 f. A6 N

if instr(Request.ServerVariables("HTTP_REFERER"),"http://你的_blank>域名")=0 then+ K% S6 P! Q6 l/ V6 ~) ^ Response.End- w% |( B7 R+ p# o4 a( ? end if

# y) c: s' Z# g, j3 P, ~

就能够很好的防止别人的盗链了

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-8-19 16:17 , Processed in 0.366059 second(s), 51 queries .

回顶部