- ◎Adodb.Stream 的使用说明(转发)
-
- ADODB.Stream组件是很重要的组件,以前一直找不全,先转过来有时间好好看看。
-
- 1、注册ADODB.Stream组件
-
- regsvr32 "C:\Program Files\Common Files\System\ado\msado15.dll"
-
- 2、使用说明
- 组件:"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
- %>
复制代码
|