ndfweb.cn

ASP將圖片寫入ACCESS數據庫


2009-04-13 09:55:29 (6507)



    
  我們先來熟悉一下將要使用的對象方法。我們用來獲取上一個頁麵傳遞過來的數據一般是使用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):    
  <   html>    
  <   body>    
  <   center>    
       <   form   name="mainForm"   enctype="multipart/form-data"    
  action="process.asp"   method=post>    
      <   input   type=file   name=mefile>  
       <   input   type=submit   name=ok   value="OK">    
       <   /form>    
  <   /center>    
  <   /body>    
  <   /html>    
    注意代碼中黑色斜體的部分,一定要在Form中有這個屬性,否則,將無法得到上傳上來的數據。    
    接下來,我們要在process.asp中對從瀏覽器中獲取的數據進行必要的處理,因為我們在process.asp中獲取到的數據不僅僅包含了我們想要的上傳上來的圖片的數據,也包含了其他的無用的信息,我們需要剔除冗餘數據,並將處理過的圖片數據保存到數據庫中,這裏我們以Access97為例。具體代碼如下(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)    
  set   connGraph=server.CreateObject("ADODB.connection")    
  connGraph.ConnectionString="driver={Microsoft   Access   Driver   (*.mdb)};DBQ="   &    
  server.MapPath("images.mdb")   &   ";uid=;PWD=;"    
  connGraph.Open    
  set   rec=server.createobject("ADODB.recordset")    
  rec.Open   "SELECT   *   FROM   [images]   where   id   is   null",connGraph,1,3    
  rec.addnew    
  rec("img").appendchunk   mydata    
  rec.update    
  rec.close    
  set   rec=nothing    
  set   connGraph=nothing    
  %   >    
    好了,這下我們就把上傳來的圖片保存到了名為images.mdb的數據庫中了,剩下的工作就是要將數據庫中的圖片數據顯示到網頁上麵了。一般在HTML中,顯示圖片都是使用標簽,也就是,但是我們的圖片是保存到了數據庫中,“圖片路徑”是什麼呢?嗬嗬,其實這個SRC屬性除了指定路徑外,也可以這樣使用哦:    
  <   IMG   SRC="showimg.asp?id=xxx">    
    所以,我們所要做的就是在showimg.asp中從數據庫中讀出來符合條件的數據,並返回到SRC屬性中就可以了,具體代碼如下(showimg.asp):    
  <   %    
  set   connGraph=server.CreateObject("ADODB.connection")    
  connGraph.ConnectionString="driver={Microsoft   Access   Driver   (*.mdb)};DBQ="   &    
  server.MapPath("images.mdb")   &   ";uid=;PWD=;"    
  connGraph.Open    
  set   rec=server.createobject("ADODB.recordset")    
  strsql="select   img   from   images   where   id="   &   trim(request("id"))    
  rec.open   strsql,connGraph,1,1    
  Response.ContentType   =   "image/*"    
  Response.BinaryWrite   rec("img").getChunk(7500000)    
  rec.close    
  set   rec=nothing    
  set   connGraph=nothing    
  %   >    
    注意在輸出到瀏覽器之前一定要指定Response.ContentType   =   "image/*",以便正常顯示圖片。    
    最後要注意的地方是,我的process.asp中作的處理沒有考慮到第一頁(upload.htm)中還有其他數據,比如<   INPUT   type=tesxt   name=userid>等等,如果有這些項目,你的process.asp就要注意處理掉不必要的數據。怎麼樣,其實上傳圖片並保存到數據庫很簡單吧,這樣再也不用為自己的空間無法使用各類的上傳組件發愁了吧。還等什麼?趕快試一試吧。
本文版权:http://www.ndfweb.cn/news-282.html
  NDF俱乐部
  国际域名注册
  建站咨询
简体中文 NDF网站建设淘宝店 | ICO图标在线生成 | 外贸网站建设 | 联系我们
©2007-2025 NDF Corporation 鲁ICP备08005967号 Sitemap - RSSRSS订阅