上傳|上傳圖片|無組件 下面是ASP無組件上傳圖片的一個例子:
<html>
<head><title>檔案上傳</title></head>
<body>
<form enctype="multipart/form-data" action="upload.asp" method="post">
請選擇要上傳的檔案: <br>
<input name="picture" type=file accept="image/*"><br>
<input type=submit value="上傳"></form>
</body>
</html>
當html檔案在Netscape Navigator(3.0以上版本)或Internet Explorer(4.0以上版本)下顯示時,“瀏覽”鍵旁邊會出現一個看上去很普通的文字框。使用者可直接將檔案名稱鍵入文字框,或用“瀏覽”鍵從檔案對話方塊中選擇一個檔案。提交該表單時,使用者所選檔案被同時提交。
<form>標籤的enctype特徵規定了請求表單資訊的編碼類別型。表單資訊一般採用URL編碼制。不過上傳檔案時,必須用enctype="multipart/form-data"特徵。
實際的檔案上傳鍵用下面的標籤建立:
<input name="picture" type=file accept="image/*">
因為type的特徵值是file,所以瀏覽器會建立一個檔案上傳鍵。accept特徵限制了在檔案對話方塊中出現的特定檔案,這種情況下檔案類型限制為圖檔案。可以規定任何MIME類型的清單作為accept的特徵值。
檔案上傳鍵非常有用,遺憾的是許多瀏覽器只是部分支援上傳鍵。例如Netscape Navigator(3.0及4.0版本)忽略了accept特徵,IE 3.0版本甚至更差,它完全不能解釋上傳鍵,而是顯示普通的文字框。不過IE 4.0和5.0版本可識別檔案上傳鍵。
建立帶檔案上傳鍵的html表單只是上傳檔案的第一步,提交帶上傳鍵的檔案不能用request對象的普通方法獲得檔案內容。ASP中request對象有專門用作此目的的特殊方法。當表單被郵遞後,request對象的BinaryRead()方法用來讀取提交的原始位元組。注意:一旦在ASP中使用了BinaryRead()方法,就不能用普通的Request.Form()方法擷取表單資料了(反之亦然)。
假定使用者使用前面提到的表單提交了一幅圖片,那麼可以用下面的指令碼擷取並顯示提交的原始位元組。
<%
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
Response.BinaryWrite FormData
%>
上面的指令碼用Request對象的TotalBytes特徵擷取送入http網站的位元組數。然後,所有的表單資料被賦給名為FormData的變數。最後用Response對象的BinaryRead()方法輸出上傳的資料內容。
但是用這種方法輸出的指令碼不是完全可讀的,它包含上傳檔案的所有未經處理資料及有關該檔案內容的重要訊息。
得到資料後可以儲存在資料庫中、檔案中或僅僅顯示它,甚至可以快速地改變原始映像資料來建立定製映像。下面的指令碼去掉了檔案頭,並顯示作為映像在瀏覽器上傳的檔案。
<%
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
bnCRLF=chrB(13) & chrB(10)
Divider=LEFTB(FormData,INSTRB(FormData,bnCRLF)-1)
DataStart=INSTRB(FormData,bnCRLF & bnCRLF)+4
DataEnd=INSTRB(DataStart+1,FormData,divider)-DataStart
Response.ContentType="image/gif"
Response.BinaryWrite MIDB(FormData,DataStart,DataEnd)
%>
上面的指令碼用INSTRB()函數從表單資料中摘出圖象資料,找到起始位置。它假定圖象資料以兩個斷行符號和分行符號開始,並以同樣的分隔字元結束。然後用Response對象的ContenType規定送入瀏覽器的內容是GIF圖象。最後用BinaryWrite()方法輸出資料。圖片就顯示在瀏覽器上。
上面的指令碼假定提交的表單只包含一個含有映像資料的域。不過包含檔案上傳元素的html表單還可包含其他標準元素,例如文字框、文本區等。
儘管可以用標準的ASP指令碼處理複雜的表單,但最好還是使用第三方ASP組件,可以用與處理標準html表單的相同方法,處理包含檔案上傳元素的表單。