用ASP和VBScript上傳檔案(二)

來源:互聯網
上載者:User
vbscript|vbscript 上傳指令碼的使用
  
    下面是開發的上傳指令碼的應用範例。本文的下載檔案提供例子中的檔案和代碼。將壓縮檔釋放到一個路徑下,為你的網路伺服器配置一個虛擬路徑。可以在瀏覽器中測試和啟動uploadForm.html。
  
  呼叫指令碼
  
    下面是調用上傳BuildUploadRequest 方法的途徑。首先調用一個全程dictionary:UploadRequest。然後調用BuilUploadRequest方法,然後在自變數中傳送到請求原始位元據。
  
  byteCount = Request.TotalBytes
  RequestBin = Request.BinaryRead(byteCount)
  Dim UploadRequest
  Set UploadRequest = CreateObject("Scripting.Dictionary")
  BuildUploadRequest RequestBin
  
    資料被分解並儲存在dictionary對象中,並用Item() 方法恢複。這些item 資料可以儲存在VBScript 變數中,並且可以在代碼的任何地方使用。資料可以作為響應傳送回客戶機,或用在ASP代碼中,或寫進檔案中及放入資料庫中。
  
  取回資料
  
    UploadRequest 對象的資料可用Item("key") 函數進行存取。現在來考慮一下這樣的情況:要存取一個 email控制的值。可以這樣做:
  
  email = UploadRequest.Item("email").Item("Value")
  
    因為這是一個文本類控制,內容是一個字串,這個字串可以同任何其它VBScript 字串一樣使用。 對於位元據,可以用相同方法恢複內容:
  
  picture = UploadRequest.Item("blob").Item("Value")
  
    也可以存取其它資訊,如檔案名稱和content-type。他們是文本類控制。
  
  contentType = UploadRequest.Item("blob").Item("ContentType")
  filepathname = UploadRequest.Item("blob").Item("FileName")
  
  在 VBScript 代碼中使用資料
  
    上傳的資料可以同其它變數一樣在VBScript 代碼中使用。比如說,它們可以作為響應發送回客戶機。
  
  Your email is : 〈%=email%〉
  File name of you picture is 〈%=filepathname%〉
  File type of your picture is 〈%=contentType%〉
  
    位元據也可以發送回客戶機。必須設定一個content-type,可以用BinaryWrite 方法寫位元據。
  
  Response.ContentType = contentType Response.BinaryWrite picture
  
  向檔案中寫入上傳資料
  
    在檔案類控制的情況下,目的通常是將位元據存入某個檔案或資料庫域,而不是將它們傳送回客戶機。這個目的是上傳檔案的固有特點。使用FileSystem對象將上傳檔案存入伺服器的檔案系統中。
  
    首先建立FileSystem對象:
  
  ’Create FileSytemObject Component Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")
  
    用FileSystem對象在路徑中建立一個檔案。路徑可以是絕對的,直接指向檔案系統(如c:\temp)。也可以是相對的,到網路伺服器定義的一個虛擬路徑下。用mappath方法和PATH_INFO伺服器變數將虛擬路徑影射到絕對路徑。
  
    Write方法需要一個雙位元組字元串作為自變數,所以要將單位元組數列轉換成字串。Write方法負責轉換這個雙位元組字元串,並用ASCII 格式寫它。這就建立了一個包含我們原始的單位元組字串的二進位內容的檔案。我已將這個檔案命名為“uploaded+filename”,這隻是為了區別檔案,你可以使用任何其它檔案名稱,如:
  
  ’Create and Write to a File Set MyFile = ScriptObject.CreateTextFile(Server.mappath(Request.ServerVariables _ ("PATH_INFO")) & "uploaded" & filename)
  For i = 1 to LenB(value)
  MyFile.Write chr(AscB(MidB(value, i, 1)))
  Next
  MyFile.Close
  
  將上傳資料存入資料庫
  
    資料還可以被存入資料庫。content-type 也應該存入資料庫中,以便以後顯示資料。首先要建立與資料庫的串連,假定已經設定了適當的DSN:
  
  Set conn = Server.CreateObject("ADODB.Connection")
  conn.open "DSN=wroxdns","user","pass"
  然後從串連中建立記錄集:
  
  sql = "SELECT PHOTO, CONTENTTYPE FROM MYTABLE"
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs.Open sql, conn, 3, 3
  記錄集建立之後,要將位元據放入資料庫的blob域中:
  
  picturechunk = picture & chrB(0)
  rs.Fields("PICTURE").appendChunk picturechunk
  rs.Fields("CONTENTTYPE") = contentType
  rs.Update
  conn.close
  
    在appendChunk 方法中,我不得不解決一個臭蟲。事實上我注意到,當位元據有奇數位元組時,appendChunk 方法就不傳送最後一個位元組。解決的辦法是增加一個chr(0),以確保傳送了所有的位元組。也許還有其它辦法,如果有的話,請告訴我。
  
    要得到資料庫的映象,使用相同的記錄集,並用正確的內容類型將它作為響應發送回客戶機。
  
  Response.contentType = rs.Fields("CONTENTTYPE")
  size = rs.Fields("PICTURE").ActualSize
  blob = rs.Fields("PICTURE").GetChunk(size)
  Response.binarywrite blob
  
  結論
  
    本文展現了一個完整的用VBScript 進行檔案上傳的方法。編碼完全是VBScript ,獨立於第三方產品。
  
    首先集中介紹上傳的過程(用" multipart/form-data "型內容進行HTML傳遞)。然後詳細介紹上傳的 VBScript代碼。開始時對操作字串和單位元組數列的VBScript函數進行簡要回顧。然後介紹了指令碼的代碼 以及上傳資料的結構。
  
    最後顯示了這個指令碼的多個用途,從使用ASP代碼中的上傳變數到資料庫或檔案系統中儲存上傳檔案。
  
    點擊下面的連結,下載<a href="http://www.asptoday.com/articles/images/20000316.zip">本文的常式代碼。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.