您的位置:首页 > 编程语言 > VB

关于Adodb.Stream 的使用说明

2016-08-01 19:57 573 查看
组件:"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)>

将上面的东西存成download.asp然后你就可以用http://xxx.xxx.com/download.asp?n=file.doc"来下载

同一目录下的file.doc了!

但是这里有个问题就是直接将file.doc路径写在url里是不安全的,所以解决方案应该是将file.doc的路

径存到数据库里,同过查找数据库后得到路径

在这个程序的最前面如果加上一个判断:

if instr(Request.ServerVariables("HTTP_REFERER"),"http: file://你的域名")=0 then 

Response.End 

end if

就能够很好的防止别人的盗链了 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vbs