程序代码:
内容: download.asp?file=相对路径的文件
就可以把这个文件下载下来
<%
call downloadFile(replace(replace(Request("file"),"\",""),"/",""))
Function downloadFile(strFile)
' make sure you are on the latest MDAC version for this to work
' -------------------------------------------------------------
' get full path of specified file
strFilename = server.MapPath(strFile)
' clear the buffer
Response.Buffer = True
Response.Clear
'create stream
Set s = Server.CreateObject("ADODB.Stream")
s.Open
'Set as binary
s.Type = 1
'load in the file
on error resume next
' check the file exists
Set fso = Server.CreateObject("Scripting.FileSystemObject")
if not fso.FileExists(strFilename) then
Response.Write("<h1>Error:</h1>" & strFilename & " does not exist<p>")
Response.End
end if
' get length of file
Set f = fso.GetFile(strFilename)
intFilelength = f.size
s.LoadFromFile(strFilename)
if err then
Response.Write("<h1>Error: </h1>" & err.Description & "<p>")
Response.End
end if
' send the headers to the users browser
Response.AddHeader "Content-Disposition", "attachment; filename=" & f.name
Response.AddHeader "Content-Length", intFilelength
Response.CharSet = "UTF-8"
Response.ContentType = "application/octet-stream"
' output the file to the browser
Response.BinaryWrite s.Read
Response.Flush
' tidy up
s.Close
Set s = Nothing
End Function
%>
ASP中利用ADODB.Stream对象将字节流转换为字符流
程序代码:
内容: ASP中利用ADODB.Stream对象将字节流转换为字符流
'--------------------------------------------------------------------
' 二进制转字符串
'
' 入口参数:字节流
' 函数返回:字符串
' Code By:Madpolice 2002-12-20
' 利用 ADODB.Stream 对象,速度比原来的字符替换法快了n倍,n≈30!!)
'--------------------------------------------------------------------
'下面的常量是函数用到的,因为我在函数外面已经定义过了,因此不在这里重复定义
'---- StreamTypeEnum Values ----
'Const adTypeBinary = 1
'Const adTypeText = 2
Function Bytes2bStr(vin)
Dim BytesStream,StringReturn
Set BytesStream = Server.CreateObject("ADODB.Stream") '建立一个流对象
With BytesStream
.Type = adTypeText '设置流对象的类型为字符流
.Open '打开流对象
.WriteText vin '把vin写入流对象中
.Position = 0 '设置流对象的起始位置是0,也就是开头
'这个操作必须做,为什么我也不知道,失败了n次得出的结论
'如果不进行这个操作,下面设置Charset属性就出错
.Charset = "GB2312" '设置流对象的编码方式为GB2312
.Position = 2 '设置流对象的起始位置是2(过滤掉开始的一个控制字符
'这个控制字符是WriteText方法按默认属性Charset="Unicode"
'读入数据的时候自动加到数据开头的,字符的值是FF3F
'这个控制字符占2字节,所以Position设置为2
'表示略过2个字节,下面的ReadText方法从Position开始读数据
StringReturn = .ReadText '把流对象的内容保存在StringReturn变量中
.close '关闭流对象
End With
Set BytesStream = Nothing '销毁流对象
Bytes2bStr = StringReturn
End Function
'--------------------------------------------------------------------
内容: 用Adodb.Stream将以二进制方式保存在数据库中的文件保存到硬盘
对于上传的数据库中的文件有的时候需要保存成硬盘上的文件,下面的代码以ACCESS数据库为例,演示怎样通过
Adodb.Stream将文件保存到硬盘
表:Demo的结构
=======================================
id: 自动编号
filename:文本
data: OLE 对象
代码
=======================================
<%
Dim Conn,ConnStr,Rs,Sql,MyStream
ConnStr="DBQ=" + Server.Mappath("Demo.mdb") + ";DRIVER={Microsoft Access Driver (*.mdb)};"
Set Conn = Server.CreateObject("Adodb.Connection")
Conn.Open ConnStr
Sql = "select * from demo where id=1"
Set Rs = Server.CreateObject("Adodb.RecordSet")
Rs.Open Sql,Conn,1,3
Set MyStream=Server.CreateObject("Adodb.Stream")
MyStream.Type = 1
MyStream.Open
MyStream.Write Rs("data").GetChunk(rs("data").ActualSize-78)
MyStream.SaveToFile "c:\" & Rs("fileName")
Rs.Close
Set Rs = Nothing
Conn.Close
Set Conn = Nothing
%>
用Adodb.Stream将以二进制方式保存在数据库中的文件保存到硬盘
程序代码:
内容: 用Adodb.Stream将以二进制方式保存在数据库中的文件保存到硬盘
对于上传的数据库中的文件有的时候需要保存成硬盘上的文件,下面的代码以ACCESS数据库为例,演示怎样通过
Adodb.Stream将文件保存到硬盘
表:Demo的结构
=======================================
id: 自动编号
filename:文本
data: OLE 对象
代码
=======================================
<%
Dim Conn,ConnStr,Rs,Sql,MyStream
ConnStr="DBQ=" + Server.Mappath("Demo.mdb") + ";DRIVER={Microsoft Access Driver (*.mdb)};"
Set Conn = Server.CreateObject("Adodb.Connection")
Conn.Open ConnStr
Sql = "select * from demo where id=1"
Set Rs = Server.CreateObject("Adodb.RecordSet")
Rs.Open Sql,Conn,1,3
Set MyStream=Server.CreateObject("Adodb.Stream")
MyStream.Type = 1
MyStream.Open
MyStream.Write Rs("data").GetChunk(rs("data").ActualSize-78)
MyStream.SaveToFile "c:\" & Rs("fileName")
Rs.Close
Set Rs = Nothing
Conn.Close
Set Conn = Nothing
%>
组件: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