ASP實現圖片上存

來源:互聯網
上載者:User
用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.BinaryWritedata
參數
data
要寫入到用戶端瀏覽器中的資料包。
*Request.TotalBytes文法:
variant=Request.TotalBytes
參數
variant
返回從用戶端讀取到資料量的位元組數。
*AppendChunk文法
將資料追加到大型文本、位元據Field或Parameter對象。
object.AppendChunkData
參數
objectField或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將把調用解釋為新的GetChu
nk操作並從屬記錄的起始處開始讀取。如果其他Recordset對象不是首個Recordset對象的副本,
則訪問其中的欄位不會破壞GetChunk操作。
如果Field對象的Attributes屬性中的adFldLong位設定為True,則可以對該欄位使用GetChun
k方法。
如果在Field對象上使用Getchunk方法時沒有目前記錄,將產生錯誤3021(無目前記錄)。
  接下來,我們就要來設計我們的資料庫了,作為測試我們的資料庫結構如下(access200
0):


欄位名稱    類型    描述
  id   自動編號   主索引值
img OLE對象   用來儲存圖片資料 


對於在MSSQLServer7中,對應的結構如下:
欄位名稱    類型    描述
  id    int(Identity)  主索引值
img   image    用來儲存圖片資料 


現在開始正式編寫我們的純ASP代碼上傳部分了,首先,我們有一個提供給使用者的上傳介面
,可以讓使用者選擇要上傳的圖片。代碼如下
(upload.htm):
<html>
<body>
<center>
<form name="mainForm" enctype="multipart/form-data" action="process.asp" method=p
ost>
  <inputtype=filename=mefile><br>
  <inputtype=submitname=okvalue="OK">
</form>
</center>
</body>
</html>
注意enctype="multipart/form-data",一定要在Form中有這個屬性,否則,將無法得到上傳
上來的資料。接下來,我們要在process.asp中對從瀏覽器中擷取的資料進行必要的處理,因
為我們在process.asp中擷取到的資料不僅僅包含了我們想要的上傳上來的圖片的資料,也包
含了其他的無用的資訊,我們需要剔除冗餘資料,並將處理過的圖片資料儲存到資料庫中,這
裡我們以access2000為例。具體代碼如下(process.asp):
<%
response.buffer=true
formsize=request.totalbytes
formdata=request.binaryread(formsize)
bncrlf=chrB(13)&chrB(10)
divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)
datastart=instrb(formdata,bncrlf&bncrlf)+4
dataend=instrb(datastart+1,formdata,divider)-datastart
mydata=midb(formdata,datastart,dataend)
setconnGraph=server.CreateObject("ADODB.connection")
connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&server.Ma
pPath("images.mdb")&";uid=;PWD=;"
connGraph.Open
setrec=server.createobject("ADODB.recordset")
rec.Open"SELECT*FROM[images]whereidisnull",connGraph,1,3
rec.addnew
rec("img").appendchunkmydata
rec.update
rec.close
setrec=nothing
setconnGraph=nothing
%>
好了,這下我們就把上傳來的圖片儲存到了名為images.mdb的資料庫中了,剩下的工作就是要
將資料庫中的圖片資料顯示到網頁上面了。一般在HTML中,顯示圖片都是使用<IMG>標籤
,也就是<IMGSRC="圖片路徑">,但是我們的圖片是儲存到了資料庫中,“圖片路徑”是什麼
呢?呵呵,其實這個SRC屬性除了指定路徑外,也可以這樣使用哦:
<IMGSRC="showimg.asp?id=xxx">
所以,我們所要做的就是在showimg.asp中從資料庫中讀出來合格
資料,並返回到SRC屬性中就可以了,具體代碼如下(showimg.asp):
<%
setconnGraph=server.CreateObject("ADODB.connection")
connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&
server.MapPath("images.mdb")&



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。