用ASP和VBScript上載文件(二)
2024-05-04 11:06:34
供稿:網友
上載腳本的使用
下面是開發的上載腳本的應用范例。本文的下載文件提供例子中的文件和代碼。將壓縮文件釋放到一個路徑下,為你的網絡服務器配置一個虛擬路徑??梢栽跒g覽器中測試和啟動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") 函數進行存取?,F在來考慮一下這樣的情況:要存取一個 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 >本文的例程代碼。 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。