首頁>Club>
22
回覆列表
  • 1 # 使用者990540253822

    一.基於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

    %>

  • 中秋節和大豐收的關聯?
  • 總共有10張信用卡,合計每月迴圈欠款在5.5萬左右,合計信用卡欠款16萬,請問我的生活還有希望嗎?