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
 
private   adSaveCreateOverWrite   ’创建文件的时候可以覆盖已经存在的文件.
private   adSaveCreateNotExist   ’保存文件的时候如果文件不存在,可以创建文件.
 
’*************************************************************
’   事件名称:   Class_Initialize()
’   事件发生条件:   类创建时候产生该事件
’   事件内容:   给私有变量赋值
’   事件传入参数:   无
’*************************************************************
 
sub   Class_Initialize()
adSaveCreateOverWrite   =2
adSaveCreateNotExist   =   1
end   sub
 
’*************************************************************
’   函数名称:   function   readfile(filepath)
’   函数内容:   读出文件
’   传入参数:   filepath:要读的文件的绝对路径
’   返回参数:   要读的文件的内容.
’*************************************************************
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(filepath,str)
’   函数内容:   写入文件
’   传入参数:   filepath:要读的文件的绝对路径
’   str:   要写入的内容
’   返回参数:   无返回
’*************************************************************
 
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(filepath_s,filepath_d)
’   函数内容:   读出文件
’   传入参数:   filepath_d:目的文件的绝对路径
’   filepath_s:源文件路径
’*************************************************************
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)>

コメントを残す

メールアドレスが公開されることはありません。