上次說到的上傳圖片是採用稻香老農開發的無組件上傳。其上傳過程是將圖片先儲存到指定檔案夾,與此同時將該路徑儲存至資料庫欄位的。顯示圖片則是根據資料庫表中的路徑欄位對應顯示的。當然有關圖片的管理,比如刪除:只刪除了路徑,實際的圖片需要根據該路徑通過FSO進行刪除……
那有沒有這樣一種情況:將圖片直接作為一個欄位的值儲存。對圖片的操作就象是對資料欄位的操作一樣熟練。答案是肯定的,只是將該欄位的類型設為OLE對象
知識點:OLE 對象欄位用來儲存諸如 Microsoft Word 或 Microsoft EXCEL 文檔、圖片、聲音的資料以及在別的程式中建立的其他類型的位元據。OLE 對象可以連結或嵌入到 Microsoft Access 表的欄位中。
一、設計資料庫testimg.mdb
為方便調試,設計表imgurl,其中兩個欄位:id(自動編號、關鍵字)、img(OLE 對象)
二、串連資料庫檔案conn.asp
<% db_path="testimg.mdb" set conn=server.CreateObject("ADODB.connection") connstr="driver={Microsoft Access Driver (*.mdb)};dbq="&server.MapPath(db_path) conn.open connstr %> |
三、提供上傳圖片的表單頁面upload.html
<form action="upload.asp" method="post" enctype="multipart/form-data"> <input type="file" name="imgurl"> <input type="submit" name=ok value="ok"> </form> |
四、接受資料並添加記錄頁upload.asp
<!--#include file="conn.asp"--> <% 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 rs=server.createobject("ADODB.recordset") rs.open "SELECT * FROM imgurl",conn,3,3 rs.addnew rs("img").AppendChunk myData rs.update rs.close set rs=nothing set conn=nothing response.redirect "index.asp" %> |
五、提取資料庫表中圖片欄位內容以做顯示圖片頁showimg.asp
<!--#include file="conn.asp"--> <% set rs=server.createobject("ADODB.recordset") sql="select * from imgurl where id="&trim(request("id")) rs.open sql,conn,1,1 Response.ContentType="image/*" Response.BinaryWrite rs("img").getChunk(8000000) rs.close set rs=nothing set conn=nothing %> |
六、顯示圖片的index.asp
<!--#include file="conn.asp"--> <% strsql="select * from imgurl" set rs=server.createobject("ADODB.recordset") rs.open strsql,conn,1,1 do until rs.eof whatid=rs("id") %> <img src="showimg.asp?id=<%=whatid%>"><% rs.movenext loop%> |