?? 上傳組件(1)-文章來(lái)自httpwww.aspcn.com asp中華網(wǎng).txt
字號(hào):
作者:cooljack
日期:00-5-29 上午 10:02:04
介紹 我們很多的朋友想編寫(xiě)一個(gè)上載組件,或者是一個(gè)無(wú)組件上傳的文件,我想這篇文章對(duì)你們有幫助。這編文章中我將介紹一個(gè)很重要的屬性multipart/form-data.如果你們對(duì)它非常了解,就請(qǐng)您跳過(guò)去吧!下篇我們會(huì)來(lái)具體講講怎樣做一個(gè)上傳組件 在線上傳是指在客戶端使用瀏覽器就將任意文件上傳到服務(wù)器上。所以這個(gè)對(duì)我們的瀏覽器也是有要求的,需要支持RFC1867,Netscape 3.0 ,IE3.0以上的版本都是支持的(現(xiàn)在用得很廣泛了,所以瀏覽器是沒(méi)有問(wèn)題了)。上傳是通過(guò),HTML的表單來(lái)進(jìn)行的。在這個(gè)表單中有一個(gè)屬性為:ECTYPE="multipart/form-data",當(dāng)然這個(gè)表單中也得有個(gè)項(xiàng),不然我們上傳什么啊! ENCTYPE="multipart/form-data"指示瀏覽器發(fā)送多項(xiàng)格式數(shù)據(jù)到服務(wù)器。每個(gè)數(shù)據(jù)項(xiàng)擁有一個(gè)數(shù)字頭。分開(kāi)數(shù)據(jù)項(xiàng)的是一長(zhǎng)條分隔符(后面可以看到)。到了服務(wù)器,我們?cè)儆贸绦騺?lái)分離這些數(shù)據(jù)項(xiàng)。我們可以用ASP腳本,還有上傳組件(下一節(jié)介紹)。
使用Request.BinaryRead方法來(lái)讀取POST過(guò)來(lái)的數(shù)據(jù) 讓我們來(lái)開(kāi)始我們的上傳過(guò)程吧!首先我們會(huì)來(lái)看一段標(biāo)準(zhǔn)的HTML代碼,這個(gè)代碼中的表單沒(méi)有Enctype屬性,但是使用了Request.BinaryRead方法來(lái)讀取發(fā)送到服務(wù)器的沒(méi)有解析的全部數(shù)據(jù)。這個(gè)方法需要一個(gè)參數(shù),就是讀取數(shù)據(jù)的長(zhǎng)度。所以我們還得測(cè)試一下發(fā)來(lái)的數(shù)據(jù)的長(zhǎng)度。測(cè)試長(zhǎng)度有幾種方法,比如環(huán)境變量Content_Length就能搞定,這里我們用Request.TotalBytes這個(gè)屬性 Request.BinaryRead方法是ASP中自帶的方法,我們之所以以前沒(méi)有看到是因?yàn)槭褂肦equest.Form和Requst.QueryString更簡(jiǎn)單和實(shí)用。這兩種方法已經(jīng)把傳來(lái)的數(shù)據(jù)分成了一個(gè)關(guān)聯(lián)數(shù)組,我們只需調(diào)用就行了。但是這里我們就得用Request.BinaryRead方法。原因嘛,往下看就知道了。 下面的代碼是沒(méi)有使用Enctype屬性的,文件名為test.htm: 下面是script.asp中代碼: 注意:我們使用 MidB 函數(shù)來(lái)轉(zhuǎn)換BinaryRead讀取來(lái)的數(shù)據(jù),使我們看看我們到底收到了什么數(shù)據(jù),這里我們也能用Response.BinaryWrite來(lái)查看. 下面是提交后,script.asp執(zhí)行的結(jié)果: Item1=test+test&Item2=Value2 我們一下就能認(rèn)出這是標(biāo)準(zhǔn)的URL編碼 現(xiàn)在我們加一個(gè)ENCTYPE="multipart/form-data"到我們的test.htm 的表單中去,然后再次提交,看看會(huì)出現(xiàn)什么,以下是執(zhí)行后的結(jié)果: -----------------------------7ce9c39120306Content-Disposition: form-data; name="Item1"test test-----------------------------7ce9c39120306Content-Disposition: form-data; name="Item2"Value2-----------------------------7ce9c39120306-- 通過(guò)分隔線我們能夠看到有明顯的兩段。每一段都包含著我們提交表單中的內(nèi)容。另外每一段我們還能看到一些MIME頭信息 現(xiàn)在我們用Request.Form方法來(lái)接收數(shù)據(jù),嘻嘻,我們將什么也看不到,另外還有一段出錯(cuò)信息。如果沒(méi)有ENCTYPE="multipart/form-data"我們用Request.Form看到只是想上傳的文件名,現(xiàn)在就能看到上傳的內(nèi)容了,不過(guò)Request.Form就不能用了. 我們現(xiàn)在來(lái)操作一次:我們?cè)趖est.htm上傳表單中單擊“瀏覽”按鈕。這就會(huì)彈出一個(gè)文件選擇框,在這里我們來(lái)選擇你想上傳的文件。你也可以直接在文本框中輸入文件的路徑。 注意:如果你的瀏覽器看不到“瀏覽”這個(gè)按鈕的話,八成是你的瀏覽不支持上傳。 在這里我選擇了一個(gè)gif 圖形,提交后看到的如下: -----------------------------7ce25134120306Content-Disposition: form-data; name="FileItem"; filename="D:\HomePage\New\bg.gif"Content-Type: image/gifGIF89a? ?
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -