关于用ADO STREAM做的无组件上传程序简单介绍

Kiver 发布于2003-11-9 10:38 1046 次浏览 0 位用户参与讨论   [复制分享主题]

) t- ^! F5 T& ~* @: w; Y/ e, D$ x% O+ k3 p1 p& S5 [' l' o1 _1 O
前面有人贴了用ADO STREAM做的无组件上传程序,今天我做一下关于它的简单介绍 8 Q2 o$ G8 K# Q+ ~7 R* F5 }

4 j5 b# Q' x  G4 l% [: T4 g' ^, g" R# S以前,如果要用ASP操作文件,比如移动、复制、删除或者创建一个记事本文件,基本上都是通过FILESYSTEMOBJECT对象做的,当然,这个东西很专业,也没说什么不好,它可以提供完善的文件信息,比如建立时间,大小,上次修改时间等等,但是如果你不做痛苦的高代价的字符格式转换的话,利用它你无法直接操作二进制文件。2 T, O0 j& a  u- E1 s* t) x6 }

6 D# @3 v8 |' u; O8 p& n但是,现在我们介绍的stream物件可以同时操作文本对象和二进制对象,要求是您的机器上要安装有ADO2。5或者更高版本,您可以从http://www.microsoft.com/data里去DOWN的。; B/ e- n, E3 A& N5 ?' P

! E$ s0 ?- E! N这个stream对象包含了许多操作二进制和文本文件的方法,让我们来看例子吧
/ C% N3 |; `0 X; y
  e; ?7 d$ d. ?打开stream对象
% ^* C- j+ \/ x/ \2 H. x- I2 s' j; }+ H6 Q/ V; D
<!--METADATA TYPE="typelib" UUID="00000205-0000-0010-8000-00AA006D2EA4" NAME="ADODB Type Library"--><%'Create a Stream instanceDim objStreamSet objStream = Server.CreateObject("ADODB.Stream")'Open the streamobjStream.Open 7 S0 Z: s0 }  C1 P% f& v2 |
对于以上的引用,如果您有不明白的地方,可以看我以前贴的帖子,具体什么名字忘记了2 |/ ?6 }$ P5 ?) D6 t9 `: h) Z/ ~
/ h+ U- c( z: v1 y- A! L
注意:如果版本不对以上代码会提示错误信息的。
5 X& O& M7 T- \4 k' x- {现在您已经建立了一个0长度的STREAM,任何时候,你都可以使用size属性看改stream的大小,现在我们要指定操作什么类型的信息,二进制还是text ,如果是text还要指定是ASCII还是UNICODE格式. ]: j( t% l. T% x! C4 Z5 ?& x8 K! Z

0 |* R- S' w& v8 {* ~$ L* {' [" p如下代码:
4 |. N! D. }  ^$ ^, \0 oobjStream.Type = adTypeText
" @+ @' J7 X  O5 \- J" EobjStream.Charset = "ascii") n/ @3 E5 u/ |, F% {  i
: t1 I1 Y$ {1 v
接下来我们向这个stream里写进一个text文件,用它的loadfromfile方法
- J* T3 |9 p3 ~# K. W6 B# W  _: P" `7 A
objStream.LoadFromFile "D:\Inetpub\wwwroot\webtech\083100-1.shtml"4 c7 B% o( [# x
- f) w6 O2 P7 N' S5 n, Y: r
在这里要注意的是,如果你操作stream,一定要搞清楚位置的概念,这里我们使用了loadfromfile方法以后,原来stream里的内容会被全部清除,然后,该文件被装载到stream里面,接着stream的位置恢复为0,(stream的开始位置)
: N( `5 D; \5 |+ v你如果在当前0位置写入信息,就会覆盖原来的内容,所以你如果想要追加东西的话,必须从最后位置开始操作,如下代码:
4 O$ f0 u( _- W/ e' ]9 k  m
* K$ H+ `: ^8 S2 UobjStream.Position = objStream.Size* e7 B- M) z& g. O
0 i- k) Z3 P4 c) Q4 l) M
该代码把当前位置移到最后
0 Q0 g3 F; I& T1 Y( W3 \
5 _7 E7 m$ d0 `* Z0 d5 A3 k现在我们可以往后面加东西了,嘿嘿,比如4 j; z# p+ Q3 l3 A: T
; A; v8 d' N9 T# C! `0 \
objStream.WriteText "请访问我的聊天室,MM尤其欢迎"
8 k9 R1 N) J9 `* A  A+ g$ j3 X) d7 R* p4 U- A
哈哈; c" }, S$ U' p, ^1 X
现在我们达到了我们的目的了,让我们把它保存下来
& I1 @1 ^- \, P5 G" v) ~9 l这里要注意的是因为你是用iuser_machinename的帐号的,所以相应目录要对该帐号开放写权限的,这个是没办法的事,不然会出错。9 G; S, y' ]7 K8 j

3 s4 C5 u* l% v+ x5 w! n" JobjStream.SaveToFile"D:\InetPub\wwwroot\demos\StreamDemo.txt", adSaveCreateOverwrite
' k7 o, p, O, _/ Y+ x, S2 I4 i5 c  g7 _( M5 x9 x
继承我们的优良传统,使用完以后,关闭释放  F2 B( |+ ^2 o& |" s

/ w* `' e2 R+ E. W! [$ M'Close the stream and set it to nothing...) v6 f5 F, T+ ?' ^
objStream.Close
( f! r- [, B" j- x! n+ @+ {6 VSet objStream = Nothing
- R2 z& Q7 n; k/ X7 K%>
' M  e1 q$ Y1 m' S! w/ R4 j
) i5 ]' W/ v( x- L" C0 x前面我也说过,它也能操作二进制对象,其实只要修改一些参数就可以了,让我们来看一个例子:. M& u# ^4 C" s3 @; y' j
/ i5 i+ b( U- ]
<!--METADATA TYPE="typelib"5 a6 }. {3 e/ O2 f8 x3 m9 J+ q' G: P
UUID="00000205-0000-0010-8000-00AA006D2EA4"
$ d4 y  C8 z/ w% F' Z2 mNAME="ADODB Type Library"# B2 S7 V' S8 n( s1 f6 y! s8 N
-->& Q5 S1 t: E+ Z' ~4 _" f( t
<%
5 G5 \6 r( E/ s% b" j9 j$ _8 W, W'Create a stream object" W, ~8 Q9 d8 t6 y" \
Dim objStream( u+ M  B( B# r: I  H* j
Set objStream = Server.CreateObject("ADODB.Stream")/ E6 h" b- I5 c

3 G- ]" F- `% X'Open a GIF file! x& \+ f9 [, ^6 @! Z" K+ o( N
objStream.Type = adTypeBinary
+ p4 p2 t7 R( j! p5 t0 ?objStream.Open( \8 U; s" K9 S4 n; x1 x
objStream.LoadFromFile "D:\Inetpub\wwwroot\images\banner\dimacbanner1.gif"
* Q  v; s1 ~2 y0 {; e; N6 I7 E' i- G# `+ E4 u0 K: w
'Output the contents of the stream object3 s# N0 n0 V4 s; i
Response.ContentType = "image/gif", [% }! j, M+ y5 Z4 |
Response.BinaryWrite objStream.Read
" n2 ?, M0 l7 n4 K
3 H9 h0 k3 ^  L$ z) `'Clean up....
# E: P7 T' T) g) w, q3 N; V; xobjStream.Close
( H$ i+ O( i; n! GSet objStream = Nothing5 g* B* J* a- T& ?& r9 w
%># Z& @9 A/ h% ?% o; n8 K; j
1 S. @  q/ J) F
你可以试试用这个写一个上传的东西,这样学习起来快,反正有现成的老师在,可以参考
# ?  [; d% }1 j/ `. m8 W+ X; f9 Q& f, u- n7 J9 V) S6 K
:P3 B4 p+ B$ O7 }6 p3 @9 B
您需要登录后才可以回帖 登录 | 註冊

本版积分规则

快速
回复
返回
列表
返回
顶部