Adodb.Stream 的使用说明(转发)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值