組件:"Adodb.Stream"
有下列方法:
Cancel 方法
使用方法如下
Object.Cancel
說(shuō)明:取消執(zhí)行掛起的異步 Execute 或 Open 方法的調(diào)用。
Close 方法
使用方法如下
Object.Close
:關(guān)閉對(duì)像
CopyTo 方法
使用方法如下
Object.CopyTo(destStream,[CharNumber])
說(shuō)明:將對(duì)像的數(shù)據(jù)復(fù)制,destStream指向要復(fù)制的對(duì)像,CharNumber為可選參數(shù),指要復(fù)制的字節(jié)數(shù),不選為全部復(fù)制。
Flush 方法
使用方法如下
Object.Flush
說(shuō)明:
LoadFromFile 方法
使用方法如下
Object.LoadFromFile(FileName)
說(shuō)明:將FileName指定的文件裝入對(duì)像中,參數(shù)FileName為指定的用戶名。
Open 方法
使用方法如下
Object.Open(Source,[Mode],[Options],[UserName],[Password])
說(shuō)明:打開對(duì)像,
參數(shù)說(shuō)明:Sourece 對(duì)像源,可不指定
Mode 指定打開模式,可不指定,可選參數(shù)如下:
adModeRead =1
adModeReadWrite =3
adModeRecursive =4194304
adModeShareDenyNone =16
adModeShareDenyRead =4
adModeShareDenyWrite =8
adModeShareExclusive =12
adModeUnknown =0
adModeWrite =2
Options 指定打開的選項(xiàng),可不指定,可選參數(shù)如下:
adOpenStreamAsync =1
adOpenStreamFromRecord =4
adOpenStreamUnspecified=-1
UserName 指定用戶名,可不指定。
Password 指定用戶名的密碼
Read 方法
使用方法如下:
Object.Read(Numbytes)
說(shuō)明:讀取指定長(zhǎng)度的二進(jìn)制內(nèi)容。
參數(shù)說(shuō)明:Numbytes指定的要讀取的找度,不指定則讀取全部。
ReadText 方法
使用方法如下:
Object.ReadText(NumChars)
說(shuō)明:讀取指定長(zhǎng)度的文本
參數(shù)說(shuō)明:NumChars指定的要讀取的找度,不指定則讀取全部。
SaveToFile 方法
使用方法如下:
Object.SaveToFile(FileName,[Options])
說(shuō)明:將對(duì)像的內(nèi)容寫到FileName指定的文件中
參數(shù)說(shuō)明:FileName指定的文件
Options 存取的選項(xiàng),可不指定,可選參數(shù)如下:
adSaveCreateNotExist =1
adSaveCreateOverWrite =2
SetEOS 方法
使用方法如下:
Object.setEOS()
說(shuō)明:
SkipLine 方法
使用方法如下:
Object.SkipLine()
說(shuō)明:
Write 方法
使用方法如下:
Object.Write(Buffer)
說(shuō)明:將指定的數(shù)據(jù)裝入對(duì)像中。
參數(shù)說(shuō)明:Buffer 為指定的要寫入的內(nèi)容。
WriteText 方法
使用方法如下:
Object.Write(Data,[Options])
說(shuō)明:將指定的文本數(shù)據(jù)裝入對(duì)像中。
參數(shù)說(shuō)明:Data 為指定的要寫入的內(nèi)容。
Options 寫入的選項(xiàng),可不指定,可選參數(shù)如下:
adWriteChar =0
adWriteLine =1
有下列屬性:
Charset
EOS 返回對(duì)像內(nèi)數(shù)據(jù)是否為空。
LineSeparator 指定換行格式,可選參數(shù)有
adCR =13
adCRLF =-1
adLF =10
Mode 指定或返加模式。
Position 指定或返加對(duì)像內(nèi)數(shù)據(jù)的當(dāng)前指針。
Size 返回對(duì)像內(nèi)數(shù)據(jù)的大小。
State 返加對(duì)像狀態(tài)是否打開。
Type 指定或返回的數(shù)據(jù)類型,可選參數(shù)為:
adTypeBinary =1
adTypeText =2
用了6行代碼實(shí)現(xiàn)了無(wú)組件上傳:
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為你的主機(jī)地址
執(zhí)行完后你會(huì)看到你的目錄下面多了一個(gè)123_onweb.gif
他就是你要文件拉!?。?!
根據(jù)原理我們可以擴(kuò)展以下代碼:
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,有的空間不支持。
有一個(gè)LoadFromFile的方法??梢宰x取文件。
下面是我的代碼。
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
兩個(gè)參數(shù)。URL是文件的路徑,好像只能絕對(duì)路徑。chartype是文件以什么編碼存放的。
返回一個(gè)字符串,存放文件的內(nèi)容。
這個(gè)函數(shù)只能讀文本文件。讀二進(jìn)制文件也差不多。要用的人可以自己改
|
< = src="/article/js/c9.js"> 基于adodb.stream的文件操作類 |
<%
’************************************************************* ’轉(zhuǎn)發(fā)時(shí)請(qǐng)保留此聲明信息,這段聲明不并會(huì)影響你的速度! ’*************************************************************
’************************************************************* ’@author: 面條 ’@realname: 徐仁祿 ’@email: xurenlu@sohu.com ’@QQ: 55547082 ’@Homepage: http://www. ’@版權(quán)申明: ’ 非盈利性質(zhì)團(tuán)體或者個(gè)人可以免費(fèi)使用. ’*************************************************************
’************************************************************* ’ 類名稱: files ’ 類功能: 實(shí)現(xiàn)文件讀寫功能,利用adodb.stream實(shí)現(xiàn),在不支持fso的主機(jī)上也可以讀寫文件. ’*************************************************************
class files private adSaveCreateOverWrite ’創(chuàng)建文件的時(shí)候可以覆蓋已經(jīng)存在的文件. private adSaveCreateNotExist ’保存文件的時(shí)候如果文件不存在,可以創(chuàng)建文件.
’************************************************************* ’ 事件名稱: Class_Initialize() ’ 事件發(fā)生條件: 類創(chuàng)建時(shí)候產(chǎn)生該事件 ’ 事件內(nèi)容: 給私有變量賦值 ’ 事件傳入?yún)?shù): 無(wú) ’*************************************************************
sub Class_Initialize() adSaveCreateOverWrite =2 adSaveCreateNotExist = 1 end sub
’************************************************************* ’ 函數(shù)名稱: function readfile(filepath) ’ 函數(shù)內(nèi)容: 讀出文件 ’ 傳入?yún)?shù): filepath:要讀的文件的絕對(duì)路徑 ’ 返回參數(shù): 要讀的文件的內(nèi)容. ’************************************************************* 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
’************************************************************* ’ 函數(shù)名稱: function writefile(filepath,str) ’ 函數(shù)內(nèi)容: 寫入文件 ’ 傳入?yún)?shù): filepath:要讀的文件的絕對(duì)路徑 ’ str: 要寫入的內(nèi)容 ’ 返回參數(shù): 無(wú)返回 ’*************************************************************
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
’************************************************************* ’ 函數(shù)名稱: function copy(filepath_s,filepath_d) ’ 函數(shù)內(nèi)容: 讀出文件 ’ 傳入?yún)?shù): filepath_d:目的文件的絕對(duì)路徑 ’ 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直接下載文件
在瀏覽器的地址欄里直接輸入一個(gè)doc或xls或jpg的文件的url路徑,那么該文件會(huì)直接顯示在瀏覽器里
。而在很多時(shí)候我們希望能直接彈出下載提示框讓用戶下載,我們?cè)撛趺崔k呢?這里有兩種方法:
1、設(shè)置你的服務(wù)器的iis,給doc等后綴名做映射
2、在向客戶端發(fā)送時(shí)設(shè)置其contenttype
下面詳細(xì)說(shuō)明方法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
‘*********************************************調(diào)用時(shí)傳入的下載文件名
Dname=trim(request("n"))
‘******************************************************************
If Dname<>"" Then
‘******************************下載文件存放的服務(wù)端目錄
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
‘*********************************************調(diào)用時(shí)傳入的下載文件名
Dname=trim(request("n"))
‘******************************************************************
If Dname<>"" Then
‘******************************下載文件存放的服務(wù)端目錄
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./download.asp?n=file.doc"來(lái)下載
同一目錄下的file.doc了!
但是這里有個(gè)問(wèn)題就是直接將file.doc路徑寫在url里是不安全的,所以解決方案應(yīng)該是將file.doc的路
徑存到數(shù)據(jù)庫(kù)里,同過(guò)查找數(shù)據(jù)庫(kù)后得到路徑
在這個(gè)程序的最前面如果加上一個(gè)判斷:
if instr(Request.ServerVariables("HTTP_REFERER"),"http: file://你的域名")=0 then
Response.End
end if
就能夠很好的防止別人的盜鏈了