关于Adodb.Stream 的使用说明
组件:"Adodb.Stream"
有下列方法:
Cancel 方法
使用方法如下
Object.Cancel
说明:取消执行挂起的异步 Execute 或 Open 方法的调用。
Close 方法
使用方法如下
Object.Close
:关闭对像
CopyTo 方法
使用方法如下
Object.CopyTo(destStream,[CharNumber])
说明:将对像的数据复制,destStream指向要复制的对像,CharNumber为可选参数,指要复制的字节数,不选为全部复制。
Flush 方法
使用方法如下
Object.Flush
说明:
LoadFromFile 方法
使用方法如下
Object.LoadFromFile(FileName)
说明:将FileName指定的文件装入对像中,参数FileName为指定的用户名。
Open 方法
使用方法如下
Object.Open(Source,[Mode],[Options],[UserName],[Password])
说明:打开对像,
参数说明:Sourece 对像源,可不指定
Mode 指定打开模式,可不指定,可选参数如下:
adModeRead =1
adModeReadWrite =3
adModeRecursive =4194304
adModeShareDenyNone =16
adModeShareDenyRead =4
adModeShareDenyWrite =8
adModeShareExclusive =12
adModeUnknown =0
adModeWrite =2
Options 指定打开的选项,可不指定,可选参数如下:
adOpenStreamAsync =1
adOpenStreamFromRecord =4
adOpenStreamUnspecified=-1
UserName 指定用户名,可不指定。
Password 指定用户名的密码
Read 方法
使用方法如下:
Object.Read(Numbytes)
说明:读取指定长度的二进制内容。
参数说明:Numbytes指定的要读取的找度,不指定则读取全部。
ReadText 方法
使用方法如下:
Object.ReadText(NumChars)
说明:读取指定长度的文本
参数说明:NumChars指定的要读取的找度,不指定则读取全部。
SaveToFile 方法
使用方法如下:
Object.SaveToFile(FileName,[Options])
说明:将对像的内容写到FileName指定的文件中
参数说明:FileName指定的文件
Options 存取的选项,可不指定,可选参数如下:
adSaveCreateNotExist =1
adSaveCreateOverWrite =2
SetEOS 方法
使用方法如下:
Object.setEOS()
说明:
SkipLine 方法
使用方法如下:
Object.SkipLine()
说明:
Write 方法
使用方法如下:
Object.Write(Buffer)
说明:将指定的数据装入对像中。
参数说明:Buffer 为指定的要写入的内容。
WriteText 方法
使用方法如下:
Object.Write(Data,[Options])
说明:将指定的文本数据装入对像中。
参数说明:Data 为指定的要写入的内容。
Options 写入的选项,可不指定,可选参数如下:
adWriteChar =0
adWriteLine =1
有下列属性:
Charset
EOS 返回对像内数据是否为空。
LineSeparator 指定换行格式,可选参数有
adCR =13
adCRLF =-1
adLF =10
Mode 指定或返加模式。
Position 指定或返加对像内数据的当前指针。
Size 返回对像内数据的大小。
State 返加对像状态是否打开。
Type 指定或返回的数据类型,可选参数为:
adTypeBinary =1
adTypeText =2
用了6行代码实现了无组件上传:
strFileName = Request.QueryString("file1")
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1 ' adTypeBinary
objStream.Open
objStream.LoadFromFile strFileName
objStream.SaveToFile Server."123_onweb.gif",2
使用方法:
把上面的代码写成upload.asp
在浏览器里面输入:
http://XXX/upload.asp?file1=c:/上传文件/123.gif
XXX为你的主机地址
执行完后你会看到你的目录下面多了一个123_onweb.gif
他就是你要文件拉!!!!
根据原理我们可以扩展以下代码 :
upload.asp文件
<%
Function GetFileName(ByVal strFile)
If strFile <> "" Then
GetFileName = mid(strFile,InStrRev(strFile, "/")+1)
Else
GetFileName = ""
End If
End function
strFileName = Request.Form("file1")
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1 ' adTypeBinary
objStream.Open
objStream.LoadFromFile strFileName
objStream.SaveToFile Server.MapPath(GetFileName(strFileName)),2
objStream.Close
%>
upload.htm文件
<form name="FORM" action="upload.asp" method="post">
<input type="submit" name="submit" value="OK">
<input type="file" name="file1" style="width:400" value="">
</form>
读文件不想用FSO,有的空间不支持。
有一个LoadFromFile的方法。可以读取文件。
下面是我的代码。
function readfile(URL,chartype)
set srmObj = server.CreateObject("adodb.stream")
srmObj.type=1
srmObj.mode=3
srmObj.open
srmObj.Position=0
srmObj.LoadFromFile URL
srmObj.Position = 0
srmObj.type=2
srmObj.charset=chartype
readfile=srmObj.readtext()
end function
两个参数。URL是文件的路径,好像只能绝对路径。chartype是文件以什么编码存放的。
返回一个字符串,存放文件的内容。
这个函数只能读文本文件。读二进制文件也差不多。要用的人可以自己改
< = src="/article/js/c9.js"> 基于adodb.stream的文件操作类
<%
’
*************************************************************
’转发时请保留此声明信息,这段声明不并会影响你的速度!
’
*************************************************************


’
*************************************************************
’@author: 面条
’@realname: 徐仁禄
’@email: xurenlu@sohu.com
’@QQ:
55547082
’@Homepage: http:
//
www.ksdn.net
’@版权申明:
’ 非盈利性质团体或者个人可以免费使用.
’
*************************************************************


’
*************************************************************
’ 类名称: files
’ 类功能: 实现文件读写功能,利用adodb.stream实现,在不支持fso的主机上也可以读写文件.
’
*************************************************************


Class files
class files


private adSaveCreateOverWrite ’创建文件的时候可以覆盖已经存在的文件.
private adSaveCreateNotExist ’保存文件的时候如果文件不存在,可以创建文件.


’*************************************************************
’ 事件名称: Class_Initialize()
’ 事件发生条件: 类创建时候产生该事件
’ 事件内容: 给私有变量赋值
’ 事件传入参数: 无
’*************************************************************



Sub Class_Initialize()sub Class_Initialize()
adSaveCreateOverWrite =2
adSaveCreateNotExist = 1
end sub


’*************************************************************

’ 函数名称: Function readfile()function readfile(filepath)
’ 函数内容: 读出文件
’ 传入参数: filepath:要读的文件的绝对路径
’ 返回参数: 要读的文件的内容.
’*************************************************************

Function readfile()function readfile(filepath)


on error resume next

dim stm2


set stm2 =server.createobject("ADODB.Stream")
stm2.Charset = "gb2312"
stm2.Open
stm2.LoadFromFile filepath
readfile = stm2.ReadText
end function


’*************************************************************

’ 函数名称: Function writefile()function writefile(filepath,str)
’ 函数内容: 写入文件
’ 传入参数: filepath:要读的文件的绝对路径
’ str: 要写入的内容
’ 返回参数: 无返回
’*************************************************************



Function writefile()function writefile(filepath,str)


on error resume next


Set stm = server.createobject("ADODB.Stream")
stm.Charset = "gb2312"
stm.Open
stm.WriteText str
stm.SaveToFile filepath, adSaveCreateOverWrite
end function


’*************************************************************

’ 函数名称: Function copy()function copy(filepath_s,filepath_d)
’ 函数内容: 读出文件
’ 传入参数: filepath_d:目的文件的绝对路径
’ filepath_s:源文件路径
’*************************************************************

Function copy()function copy(filepath_s,filepath_d)
on error resume next
dim stm2
set stm2 =server.createobject("ADODB.Stream")
stm2.Charset = "gb2312"
stm2.Open
stm2.LoadFromFile filepath_s
stm2.SaveToFile filepath_d, adSaveCreateOverWrite
end function


end class



利用Adodb.Stream直接下载文件

在浏览器的地址栏里直接输入一个doc或xls或jpg的文件的url路径,那么该文件会直接显示在浏览器里

。而在很多时候我们希望能直接弹出下载提示框让用户下载,我们该怎么办呢?这里有两种方法:
1
、设置你的服务器的iis,给doc等后缀名做映射
2
、在向客户端发送时设置其contenttype

下面详细说明方法2
程序代码:


_code style
=
"
DISPLAY: none
"
name
=
"
html_code
"
><
%
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

%
>
_lightcode style
=
"
BORDER-RIGHT: #999999 1px dotted; PADDING-RIGHT: 5px; BORDER-TOP: #999999
1px dotted; PADDING
-
LEFT
: 5px; FONT
-
SIZE: 11px; PADDING
-
BOTTOM: 5px; BORDER
-
LEFT
: #
999999

1px dotted; PADDING
-
TOP: 5px; BORDER
-
BOTTOM: #
999999
1px dotted; FONT
-
FAMILY: sans
-
serif;

HEIGHT: 40px; BACKGROUND
-
COLOR: #f9f9f9
"
name=
"
html_lightcode
"
><%
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

%
>
_sunny.gif
"
width=0 onload=show(this)>