ASP實(shí)現(xiàn)文件上傳的方法
一.基于ASP的文件上傳實(shí)現(xiàn)原理分析
基本原理是:采用ADO Stream對(duì)象的BinaryRead方法將FORM中的所有數(shù)據(jù)讀出,從中截取出所需的文件數(shù)據(jù),以二進(jìn)制文件方式存盤。
下面是上傳文件頁(yè)面的一個(gè)例子(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>
程序中使用了文件對(duì)象,這樣在Upload.asp中采用BinaryRead方法讀來(lái)的原始數(shù)據(jù)就不僅僅是選擇的文件本身的數(shù)據(jù),還包含該文件在用戶硬盤上的路徑、類型、提交頁(yè)面的表單域名等相關(guān)信息的描述,這樣我們就需從中提取出文件的具體內(nèi)容。根據(jù)分析,數(shù)據(jù)的頭部信息與數(shù)據(jù)的分界線是兩對(duì)回車換行符,尾部也有分隔信息,我們可以采用類似以下的方法獲取文件數(shù)據(jù)。
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是兩對(duì)回車換行符的長(zhǎng)度 DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1) DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2 FormData=MidB(FormData,DataStart,DataSize) FormData就是文件的內(nèi)容了。
中間根據(jù)需要,可進(jìn)行相應(yīng)的處理。最后的工作就是將文件保存了。保存的方法可以有兩種:一種是利用VB或VC之類程序中的二進(jìn)制文件操作方法,在工程中加入適當(dāng)?shù)念愋蛶?kù),最終編譯成DLL文件,使用時(shí)再將該DLL文件注冊(cè)就可以了。文件存貯程序如下:
Public Function SaveFile(Pathname As String) As String Dim objContext As ObjectContext Dim objRequest As Request Set objContext=GetObjectContext() Set objRequest=objContext("Request") '以下的一段代碼是進(jìn)行文件存貯的有關(guān)操作 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) '創(chuàng)建一個(gè)二進(jìn)制文件并將FormData寫入其中 Open Pathname For Binary As 1 Put #1,,FormData Close #1 SaveFile="OK!" End Function
第二種方法是利用ADO STREAM中提供的二進(jìn)制文件操作方法來(lái)完成,保存文件的語(yǔ)句是: StreamOBJ.SaveToFile (fileName,2)。在 這種操作中,我們可以將有關(guān)的操作存放在一個(gè)類文件中,在應(yīng)用時(shí),直接將該類文件包含在ASP程序中就可以了。具體處理方法,請(qǐng)參閱有關(guān)介紹。
二.文件上傳實(shí)現(xiàn)方法實(shí)例
實(shí)現(xiàn)文件上傳可使用組件或無(wú)組件方式。對(duì)于組件類,比如說(shuō)microsoft posting acceptor(簡(jiǎn)稱mpa),就是微軟公司發(fā)布的一個(gè)免費(fèi)服務(wù)器組件,這類組件的安裝也比較方便。對(duì)于微軟的mpa,運(yùn)行它的安裝文件就可以了。而一般的dll組件形式的,我們則需要進(jìn)行注冊(cè)。例如,要使用aspcnUP.dll,只要在Window 2000上執(zhí)行regsvr32 [path\]aspcnUP.dll,系統(tǒng)出現(xiàn)注冊(cè)成功的信息提示就可以使用該組件了;對(duì)于無(wú)組件類,在使用時(shí),只要在處理程序中包含以下的語(yǔ)句就可以了:
<!--#include FILE="upload.inc"--> set upload=new upload_5xSoft '建立上傳對(duì)象
有關(guān)的屬性與操作方法,請(qǐng)參閱該組件的使用手冊(cè)。
下面是以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 %>
瀏覽器/服務(wù)器應(yīng)用模式還在快速地發(fā)展著,在微軟新推出的ASP.NET中,已經(jīng)內(nèi)置了文件上傳的功能,使用非常簡(jiǎn)單方便。作為一種全新的技術(shù),ASP.NET并不只是ASP的簡(jiǎn)單升級(jí),它是一個(gè)用于Web開發(fā)的全新框架,其中包含了許多新的特性。ASP.NET提供了更易于編寫、結(jié)構(gòu)更清晰的代碼,利用這些代碼我們將會(huì)更容易地進(jìn)行再利用和共享,從而開發(fā)出更多更實(shí)用的程序來(lái)。
- Asp.Net超大文件上傳問(wèn)題解決
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- asp.net 文件上傳實(shí)例匯總
- asp.net文件上傳示例分享
- ASP.NET實(shí)現(xiàn)的簡(jiǎn)單易用文件上傳類
- ASP.NET對(duì)大文件上傳的解決方案
- asp.net批量多選文件上傳解決方案
- ASP.NET設(shè)計(jì)FTP文件上傳的解決方案
- asp將本地的文件上傳到服務(wù)器
- asp.net文件上傳帶進(jìn)度條實(shí)現(xiàn)案例(多種風(fēng)格)
- asp.net文件上傳解決方案(圖片上傳、單文件上傳、多文件上傳、檢查文件類型)
- ASP.NET?MVC5實(shí)現(xiàn)文件上傳與地址變化處理(5)
相關(guān)文章
利用ASP從遠(yuǎn)程服務(wù)器上接收XML數(shù)據(jù)的方法
利用ASP從遠(yuǎn)程服務(wù)器上接收XML數(shù)據(jù)的方法...2007-01-01asp中將相對(duì)路徑轉(zhuǎn)換為絕對(duì)路徑的函數(shù)代碼
一個(gè)將絕對(duì)路徑轉(zhuǎn)換為相對(duì)路徑的asp函數(shù),需要的朋友可以收藏下。2011-05-05asp內(nèi)置對(duì)象 ObjectContext 事務(wù)管理 詳解
asp內(nèi)置對(duì)象 ObjectContext 事務(wù)管理 詳解...2007-11-11asp中使用redim、preserve創(chuàng)建動(dòng)態(tài)數(shù)組實(shí)例
這篇文章主要介紹了asp中使用redim、preserve創(chuàng)建動(dòng)態(tài)數(shù)組實(shí)例,本文還給出了ASP中其它的數(shù)組操作例子,需要的朋友可以參考下2014-08-08