关于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)>

将上面的东西存成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

就能够很好的防止别人的盗链了

posted on 2006-04-22 13:38  replace  阅读(4469)  评论(0编辑  收藏  举报

导航