本文从多个角度来讲解如何在access数据库上如何上传并且显示上所上传图片。
在动态网站制做过程中,需要上传图片、显示图片,上传的图片要能够保存在数据库中,一般小型网站只支持access数据库,如何上传图片,将其保存在数据库中并将其显示出来,是数据库+asp应用技术之一。许多书籍只介绍了sql数据库的方法,而对access却很少提及。网上有不少关于access数据库上传图片、显示图片的文章,多数文章介绍的不够全面,有些程序根本就不能开通,对于初学者来说很难把握,我通过参考一些文章,向初学者提供一套比较完整的程序,较全面地介绍了利用上传向access数据库添加图片、显示图片,希望我们这些初学的同志少走一些弯路。
第一步、要制做一个access数据库,我们给它起名字叫images.mdb,该数据库里有两个字段:id、img,id字段的类型设为自动编号,img字段的类型设为ole对象。
第二步、设计一个上传的表单,根据要求可简可繁。
第三步、设计后台的图片处理程序,可分为图片上传保存程序和图片读取程序。
第四步、图片显示。
下面给出程序并分别做介绍。
一、 表单程序updata.html
它的功能是为上传提供一个界面,表单的enctype属性为multipart/form-data,它是设置表单的mime编码的,只有使用了它才能完整地传送文件的数据。
以下为引用的内容: <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="上传"> </form> </center> </body> </html> |
二、 图片的上传与保存程序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.open "provider=microsoft.jet.oledb.4.0; 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.closes set rec=nothing set conngraph=nothing %> |
这段程序的功能是将上传图片的数据保存到数据库里。下面分句说明各语句的作用。
以下为引用的内容: 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.open "provider=microsoft.jet.oledb.4.0; |
创建connection对象,并连接microsoft access数据库。
以下为引用的内容: set rec=server.createobject("adodb.recordset") rec.open "select * from images where id is null",conngraph,1,3 rec.addnew rec("img").appendchunk mydata |
创建recordset对象,打开数据库并置为写入状态,执行rec.addnew增加一条新记录,调用field对象的appendchunk方法将图片数据保存到数据库表的字段中。
后边几句关闭数据库,释放定义组件的设置。
三、 图片的读取程序showing.asp
以下为引用的内容: <% set conngraph=server.createobject("adodb.connection") conngraph.open "provider=microsoft.jet.oledb.4.0; set rec=server.createobject("adodb.recordset") id=trim(request.querystring("id")) strsql="select img from images where id="&request.querystring("id")&"" rec.open strsql,conngraph,1,1 response.contenttype = "image/gif" response.binarywrite rec("img").getchunk(7500000) rec.close set rec=nothing set conngraph=nothing %> |
response.binarywrite rec("img").getchunk(7500000)
这里调用了field对象的getchunk(size)方法,size是字节数。
需要注意的是使用response对象的 contenttype属性时mime类型的设置,我们这里将返回数据的类型设为图形方式即image/gif方式,它可以显示gif或jpg格式的图形,如果设置为image/*,程序在执行时将不能显示图片。
四、 图片的显示程序show.html
图片上传保存到数据库里就可以调用程序显示图片了,我们再做一个表单程序,提供要显示图片的id号。
以下为引用的内容: <html> <body> <center> <form name="mainform" enctype="text/plain" action="showing.asp" method="get"> |
请输入要显示图片的序号:<input type=id name=id>
以下为引用的内容: <input type=submit name=ok value="提交"> </form> </center> </body> </html> |
新闻热点
疑难解答