asp將圖片保存到access數(shù)據(jù)庫
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
[p]一般我們上傳圖片都保存在文件目錄下,但有時因?yàn)樘厥庖笮枰獙D片保存在數(shù)據(jù)庫,接下來我講一下如何用asp實(shí)現(xiàn)將圖片保存到access數(shù)據(jù)庫的方法,具體如下:[/p]
[p]第一步、要制做一個access數(shù)據(jù)庫,我們給它起名字叫images.mdb,該數(shù)據(jù)庫里有兩個字段:id、img,id字段的類型設(shè)為自動編號,img字段的類型設(shè)為ole對象。 [/p] [p] [/p] [p]第二步、設(shè)計一個上傳的表單,根據(jù)要求可簡可繁。 [/p] [p] [/p] [p]第三步、設(shè)計后臺的圖片處理程序,可分為圖片上傳保存程序和圖片讀取程序。 [/p] [p] [/p] [p]第四步、圖片顯示。 [/p] [p] [/p] [p]下面給出程序并分別做介紹。 [/p] [p] [/p] [p]一、 表單程序updata.html [/p] [p] [/p] [p]它的功能是為上傳提供一個界面,表單的enctype屬性為multipart/form-data,它是設(shè)置表單的mime編碼的,只有使用了它才能完整地傳送文件的數(shù)據(jù)。 [/p] [p] [/p] [p][/p] [p][/p] [p] [p][/p] [p] [p][/p] [p] [/p] [p]二、 圖片的上傳與保存程序process.asp [/p] [p] [/p] [p]<%[/p] [p]response.buffer=true[/p] [p]formsize=request.totalbytes[/p] [p]formdata=request.binaryread(formsize)[/p] [p]bncrlf=chrb(13) & chrb(10)[/p] [p]divider=leftb(formdata,clng(instrb(formdata,bncrlf))-1)[/p] [p]datastart=instrb(formdata,bncrlf & bncrlf)+4[/p] [p]dataend=instrb(datastart+1,formdata,divider)-datastart[/p] [p]mydata=midb(formdata,datastart,dataend)[/p] [p]set conngraph=server.createobject("adodb.connection")[/p] [p]conngraph.open "provider=microsoft.jet.oledb.4.0;[br]data source=" & server.mappath("images.mdb")[/p] [p]set rec=server.createobject("adodb.recordset")[/p] [p]rec.open "select * from images where id is null",conngraph,1,3[/p] [p]rec.addnew[/p] [p]rec("img").appendchunk mydata[/p] [p]rec.update[/p] [p]rec.closes[/p] [p]set rec=nothing[/p] [p]set conngraph=nothing %> [/p] [p]這段程序的功能是將上傳圖片的數(shù)據(jù)保存到數(shù)據(jù)庫里。下面分句說明各語句的作用。 [/p] [p] [/p] [p]response.buffer=true[/p] [p]formsize=request.totalbytes[/p] [p]formdata=request.binaryread(formsize) [/p] [p]打開緩存功能,獲取客戶端總的發(fā)送數(shù)據(jù)量,獲取上傳過來的數(shù)據(jù)。 [/p] [p] [/p] [p]bncrlf=chrb(13) & chrb(10)[/p] [p]divider=leftb(formdata,clng(instrb(formdata,bncrlf))-1) [/p] [p]這兩個語句的意思是設(shè)一個二進(jìn)制回車符及得到一個divider分隔符,目的是為了確定圖片的位置。 [/p] [p] [/p] [p]datastart=instrb(formdata,bncrlf & bncrlf)+4[/p] [p]dataend=instrb(datastart+1,formdata,divider)-datastart[/p] [p]mydata=midb(formdata,datastart,dataend) [/p] [p]以上三個語句是確定圖片數(shù)據(jù)的起始位置、結(jié)束位置及實(shí)際圖片的數(shù)據(jù)。 [/p] [p] [/p] [p]set conngraph=server.createobject("adodb.connection")[/p] [p]conngraph.open "provider=microsoft.jet.oledb.4.0;[br]data source=" & server.mappath("images.mdb") [/p] [p]創(chuàng)建connection對象,并連接microsoft access數(shù)據(jù)庫。 [/p] [p] [/p] [p]set rec=server.createobject("adodb.recordset")[/p] [p]rec.open "select * from images where id is null",conngraph,1,3[/p] [p]rec.addnew[/p] [p]rec("img").appendchunk mydata [/p] [p]創(chuàng)建recordset對象,打開數(shù)據(jù)庫并置為寫入狀態(tài),執(zhí)行rec.addnew增加一條新記錄,調(diào)用field對象的appendchunk方法將圖片數(shù)據(jù)保存到數(shù)據(jù)庫表的字段中。 [/p] [p] [/p] [p]后邊幾句關(guān)閉數(shù)據(jù)庫,釋放定義組件的設(shè)置。 [/p] [p] [/p] [p]三、 圖片的讀取程序showing.asp [/p] [p] [/p] [p]<%[/p] [p]set conngraph=server.createobject("adodb.connection")[/p] [p]conngraph.open "provider=microsoft.jet.oledb.4.0;[br]data source=" & server.mappath("images.mdb")[/p] [p]set rec=server.createobject("adodb.recordset")[/p] [p]id=trim(request.querystring("id"))[/p] [p]strsql="select img from images where id="&request.querystring("id")&""[/p] [p]rec.open strsql,conngraph,1,1[/p] [p]response.contenttype = "image/gif"[/p] [p]response.binarywrite rec("img").getchunk(7500000)[/p] [p]rec.close[/p] [p]set rec=nothing[/p] [p]set conngraph=nothing[/p] [p]%> [/p] [p]以上程序是顯示圖片的后臺程序,主要功能是按照要求的id號讀取數(shù)據(jù)庫中圖片的數(shù)據(jù)。 [/p] [p] [/p] [p]response.binarywrite rec("img").getchunk(7500000) [/p] [p]這里調(diào)用了field對象的getchunk(size)方法,size是字節(jié)數(shù)。 [/p] [p] [/p] [p]需要注意的是使用response對象的 contenttype屬性時mime類型的設(shè)置,我們這里將返回數(shù)據(jù)的類型設(shè)為圖形方式即image/gif方式,它可以顯示gif或jpg格式的圖形,如果設(shè)置為image/*,程序在執(zhí)行時將不能顯示圖片。 [/p] [p] [/p] [p]四、 圖片的顯示程序show.html [/p] [p] [/p] [p]圖片上傳保存到數(shù)據(jù)庫里就可以調(diào)用程序顯示圖片了,我們再做一個表單程序,提供要顯示圖片的id號。 [/p] [p] [/p] [p][/p] [p][/p] [p] [p][/p] [p] [p][/p] [p][/p] 該文章在 2010/5/11 16:11:09 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |