| ◎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 |
| %>COPY |