您現在的位置是:PHP\ASP\JSP\NET
下面是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特征限制了在文件對話框中出現的特定文件,這種情況下文件類型限制為圖文件?梢砸幎ㄈ魏蜯IME類型的清單作為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表單的相同方法,處理包含文件上載元素的表單。