登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

樱之花

叶散的时候,你明白欢聚;花谢的时候,你明白青春.

 
 
 

日志

 
 
关于我

分类中“我的实验室”是我在日常工作中的一些知识总结,有些写的比较匆忙,可能大家在阅读时会产生困扰,后期有时间我会重新整理编辑,谢谢大家的到访,您们的支持是我前进的动力!

ADODB.STREAM使用说明  

2007-08-14 10:04:27|  分类: ASP开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

关于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: 徐仁禄 
’@emailxurenlu@sohu.com 
’@QQ: 55547082 
’@Homepagehttp://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)>

  评论这张
 
阅读(588)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018