用ASP編寫網站應用程序時間長了,難免會遇到各式各樣的問題,其中
關於如何上傳文件到服務器恐怕是遇見最多的問題了,尤其是上傳圖片,比如你想要在自己的社區裡面實現類似網易虛擬社區提供的“每日一星”的功能,就要提供給網友上傳照片的功能。上傳圖片文件到服務器可以使用各種免費的文件上傳組件,使用起來功能雖然很強大,但是由於很多情況下,我們只能使用免費的支持ASP的空間或者租用別人的虛擬空間,對於第一種情況,我們根本就沒有可能來使用文件上傳組件;至於第二種情況,我們也要付出不少的“銀子”才可以。除非你擁有自己的虛擬主機,你就可以隨便的在服務器上面安裝自己所需要的組件,這種情況對於大多數人來說是可望而不可及的。那我們就沒有辦法了嗎?呵呵,答案是肯定的(當然是肯定的了,要不然我也沒法寫出這篇文章啊)。下面就讓我們一起來使用純ASP代碼來實現圖片的上傳以及保存到數據庫的功能(順便也實現顯示數據庫中的圖片到網頁上的功能)。
首先我們先來熟悉一下將要使用的對象方法。我們用來獲取上一個頁面傳遞過來的數據一般是使用Request對象。同樣的,我們也可以使用Request對象來獲取上傳上來的文件數據,使用的方法是Request.BinaryRead()。而我們要從數據庫中讀出來圖片的數據顯示到網頁上面要用到的方法是:
Request.BinaryWrite()。在我們得到了圖片的數據,要保存到數據庫中的時候,不可以直接使用Insert語句對數據庫進行操作,而是要使用ADO的AppendChunk方法,同樣的,讀出數據庫中的圖片數據,要使用GetChunk方法。各個方法的具體語法如下:
* Request.BinaryRead語法:
variant = Request.BinaryRead(count)
參數
variant
返回值保存著從客戶端讀取到數據。
count
指明要從客戶端讀取的數據量大小,這個值小於或者等於使用方法
Request.TotalBytes得到的數據量。
* Request.BinaryWrite語法:
Request.BinaryWrite data
參數
data
要寫入到客戶端浏覽器中的數據包。
* Request.TotalBytes語法:
variant = Request.TotalBytes
參數
variant
返回從客戶端讀取到數據量的字節數。
* AppendChunk語法
將數據追加到大型文本、二進制數據 Field 或 Parameter 對?
object.AppendChunk Data
參數
object Field 或 Parameter 對象
Data 變體型,包含追加到對象中的數據。
說明
使用 Field 或 Parameter 對象的 AppendChunk 方法可將長二進制或字符數據填寫到對象中。在系統內存有限的情況下,可以使用 AppendChunk 方法對長整型值進行部分而非全部的操作。
* GetChunk語法
返回大型文本或二進制數據 Field 對象的全部或部分內容 。
variable = field.GetChunk( Size )
返回值
返回變體型。
參數
Size 長整型表達式,等於所要檢索的字節或字符數。
說明
使用 Field 對象的 GetChunk 方法檢索其部分或全部長二進制或字符數據。在系統內存有限的情況下,可使用 GetChunk 方法處理部分而非全部的長整型值。
GetChunk 調用返回的數據將賦給“變量”。如果 Size 大於剩余的數據,則
GetChunk 僅返回剩余的數據而無需用空白填充“變量”。如果字段為空,則
GetChunk 方法返回 Null。
每個後續的 GetChunk 調用將檢索從前一次 GetChunk 調用停止處開始的數據。但是,如果從一個字段檢索數據然後在當前記錄中設置或讀取另一個字段的值,ADO 將認為已從第一個字段中檢索出數據。如果在第一個字段上再次調用 GetChunk 方法,ADO 將把調用解釋為新的 GetChunk 操作並從記錄的起始處開始讀取。如果其他 Recordset 對象不是首個 Recordset 對象的副本,則訪問其中的字段不會破壞 GetChunk 操作。如果 Field 對象的 Attributes 屬性中的 adFldLong 位設置為 True,則可以對該字段使用 GetChunk 方法。如果在 Field 對象上使用 Getchunk 方法時沒有當前記錄,將產生錯誤 3021(無當前記錄)。接下來,我們就要來設計我們的數據庫了,作為測試我們的數據庫結構如下(Access97):
字段名稱 類型 描述
id 自動編號 主鍵值
img OLE對象 用來保存圖片數據
對於在MS SQL Server7中,對應的結構如下:
字段名稱 類型 描述
id int(Identity) 主鍵值
img image 用來保存圖片數據
現在開始正式編寫我們的純ASP代碼上傳部分了,首先,我們有一個提供給用戶的上傳界面,可以讓用戶選擇要上傳的圖片。代碼如下
(upload.htm):
$#@60;html$#@62;
$#@60;body$#@62;
$#@60;center$#@62;
$#@60;form name="mainForm" enctype="multipart/form-data"
action="pro