一.基於ASP的檔案上傳實現原理分析
基本原理是:採用ADO Stream物件的BinaryRead方法將FORM中的所有資料讀出,從中截取出所需的檔案資料,以二進位制檔案方式存檔。
下面是上傳檔案頁面的一個例子(upload.htm):
<html>
<body>
<form name="Upload" Method="Post" Enctype="multipart/form-data" Action="Upload.asp">
<input type="file" name="FileName">
<INPUT TYPE="Submit" VALUE="Upload"></TD>
</form>
</body>
</html>
程式中使用了檔案物件,這樣在Upload.asp中採用BinaryRead方法讀來的原始資料就不僅僅是選擇的檔案本身的資料,還包含該檔案在使用者硬碟上的路徑、型別、提交頁面的表單域名等相關資訊的描述,這樣我們就需從中提取出檔案的具體內容。根據分析,資料的頭部資訊與資料的分界線是兩對回車換行符,尾部也有分隔資訊,我們可以採用類似以下的方法獲取檔案資料。
Dim FormData.FormSize,DataStart,CLStr,DivStr
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
CLStr=ChrB(13)&ChrB(10)
DataStart=InStrB(FormData.CLStr&CLStr)+4
"4是兩對回車換行符的長度
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
FormData就是檔案的內容了。
中間根據需要,可進行相應的處理。最後的工作就是將檔案儲存了。儲存的方法可以有兩種:一種是利用VB或VC之類程式中的二進位制檔案操作方法,在工程中加入適當的型別庫,最終編譯成DLL檔案,使用時再將該DLL檔案註冊就可以了。檔案存貯程式如下:
Public Function SaveFile(Pathname As String) As String
Dim objContext As ObjectContext
Dim objRequest As Request
Set objContext=GetObjectContext()
Set objRequest=objContext("Request")
"以下的一段程式碼是進行檔案存貯的有關操作
Dim FormData() As Byte,CLStr,DivStr
Dim DataStart As Long,DataSize As Long
DataSize=objRequest.TotalBytes
Redim FormData(DataSize-1)
FormData=objRequest.BinaryRead(DataSize)
CLStr=ChrB(13) & ChrB(10)
DataStart=InStrB(FormData,CLStr & CLStr)+4
"建立一個二進位制檔案並將FormData寫入其中
Open Pathname For Binary As 1
Put #1,,FormData
Close #1
SaveFile="OK!"
End Function
第二種方法是利用ADO STREAM中提供的二進位制檔案操作方法來完成,儲存檔案的語句是: StreamOBJ.SaveToFile (fileName,2)。在 這種操作中,我們可以將有關的操作存放在一個類檔案中,在應用時,直接將該類檔案包含在ASP程式中就可以了。具體處理方法,請參閱有關介紹。
二.檔案上傳實現方法例項
實現檔案上傳可使用元件或無元件方式。對於元件類,比如說microsoft posting acceptor(簡稱mpa),就是微軟公司釋出的一個免費伺服器元件,這類元件的安裝也比較方便。對於微軟的mpa,執行它的安裝檔案就可以了。而一般的dll元件形式的,我們則需要進行註冊。例如,要使用aspcnUP.dll,只要在Window 2000上執行regsvr32 [path\]aspcnUP.dll,系統出現註冊成功的資訊提示就可以使用該元件了;對於無元件類,在使用時,只要在處理程式中包含以下的語句就可以了:
set upload=new upload_5xSoft "建立上傳物件
有關的屬性與操作方法,請參閱該元件的使用手冊。
下面是以aspcnUP.dll元件為例,上傳部分型別檔案的原始碼(upload.asp):
<% @ language="vbscript"
Set fileUP=Server.CreateObject("aspcn.Upload")
fileUP.Maxsize=200000
fileUP.Path="d:\upfile"
fileUP.Upload
For i=0 to fileUP.Count
fieldname=fileUP.FieldName(i)
If fileUP.FileType(fieldname)="zip" Or ileUP.FileType(fieldname)="rar" Then
fileUP.Save fieldname
End If
Next
Set fileUP=Nothing
%>
一.基於ASP的檔案上傳實現原理分析
基本原理是:採用ADO Stream物件的BinaryRead方法將FORM中的所有資料讀出,從中截取出所需的檔案資料,以二進位制檔案方式存檔。
下面是上傳檔案頁面的一個例子(upload.htm):
<html>
<body>
<form name="Upload" Method="Post" Enctype="multipart/form-data" Action="Upload.asp">
<input type="file" name="FileName">
<INPUT TYPE="Submit" VALUE="Upload"></TD>
</form>
</body>
</html>
程式中使用了檔案物件,這樣在Upload.asp中採用BinaryRead方法讀來的原始資料就不僅僅是選擇的檔案本身的資料,還包含該檔案在使用者硬碟上的路徑、型別、提交頁面的表單域名等相關資訊的描述,這樣我們就需從中提取出檔案的具體內容。根據分析,資料的頭部資訊與資料的分界線是兩對回車換行符,尾部也有分隔資訊,我們可以採用類似以下的方法獲取檔案資料。
Dim FormData.FormSize,DataStart,CLStr,DivStr
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
CLStr=ChrB(13)&ChrB(10)
DataStart=InStrB(FormData.CLStr&CLStr)+4
"4是兩對回車換行符的長度
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
FormData就是檔案的內容了。
中間根據需要,可進行相應的處理。最後的工作就是將檔案儲存了。儲存的方法可以有兩種:一種是利用VB或VC之類程式中的二進位制檔案操作方法,在工程中加入適當的型別庫,最終編譯成DLL檔案,使用時再將該DLL檔案註冊就可以了。檔案存貯程式如下:
Public Function SaveFile(Pathname As String) As String
Dim objContext As ObjectContext
Dim objRequest As Request
Set objContext=GetObjectContext()
Set objRequest=objContext("Request")
"以下的一段程式碼是進行檔案存貯的有關操作
Dim FormData() As Byte,CLStr,DivStr
Dim DataStart As Long,DataSize As Long
DataSize=objRequest.TotalBytes
Redim FormData(DataSize-1)
FormData=objRequest.BinaryRead(DataSize)
CLStr=ChrB(13) & ChrB(10)
DataStart=InStrB(FormData,CLStr & CLStr)+4
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
"建立一個二進位制檔案並將FormData寫入其中
Open Pathname For Binary As 1
Put #1,,FormData
Close #1
SaveFile="OK!"
End Function
第二種方法是利用ADO STREAM中提供的二進位制檔案操作方法來完成,儲存檔案的語句是: StreamOBJ.SaveToFile (fileName,2)。在 這種操作中,我們可以將有關的操作存放在一個類檔案中,在應用時,直接將該類檔案包含在ASP程式中就可以了。具體處理方法,請參閱有關介紹。
二.檔案上傳實現方法例項
實現檔案上傳可使用元件或無元件方式。對於元件類,比如說microsoft posting acceptor(簡稱mpa),就是微軟公司釋出的一個免費伺服器元件,這類元件的安裝也比較方便。對於微軟的mpa,執行它的安裝檔案就可以了。而一般的dll元件形式的,我們則需要進行註冊。例如,要使用aspcnUP.dll,只要在Window 2000上執行regsvr32 [path\]aspcnUP.dll,系統出現註冊成功的資訊提示就可以使用該元件了;對於無元件類,在使用時,只要在處理程式中包含以下的語句就可以了:
set upload=new upload_5xSoft "建立上傳物件
有關的屬性與操作方法,請參閱該元件的使用手冊。
下面是以aspcnUP.dll元件為例,上傳部分型別檔案的原始碼(upload.asp):
<% @ language="vbscript"
Set fileUP=Server.CreateObject("aspcn.Upload")
fileUP.Maxsize=200000
fileUP.Path="d:\upfile"
fileUP.Upload
For i=0 to fileUP.Count
fieldname=fileUP.FieldName(i)
If fileUP.FileType(fieldname)="zip" Or ileUP.FileType(fieldname)="rar" Then
fileUP.Save fieldname
End If
Next
Set fileUP=Nothing
%>