第12届全国
计算机在现代科学技术领域应用学术会议论文集
Proceedingsofthe12“ChinaSymposium
on
ComputerApplicationinModem
Sc—ience&Te—chnology
一种利用ASP实现图片上传到WEB数据库的方法
位绍文(青岛市农委信息中心,山东青岛266071)杨东(山东省信息中心,山东济南250011)刘滨(青岛市市级机关东部管理中心,山东青岛266071)
摘要:本文的目的在于探索一种安全实用的方法,用ASP实现图片从客户端到WEB服务器的上传。
其中存储结构采用数据库方式,数据传输和存取采用二进制形式。测试表明:文中的示例
程序可作为应用开发的原型,仿此可开发出简捷、安全和易管理的应用程序。
关键词:互联网;图片上传;ASP;数据库文献标识码:A中图分类号:TP393.09
1
问题的提出
在ASP动态网页
设计中,将图片上传到WEB服务器加以保存是经
常用到的功能。目前互联网上有许多
免费的文件上传组件,可以用来传送图片文件到WEB服务器并加以保存而且功能很强大[1]。但是使用文件上传组件的前提是拥有自己独立可管理的虚拟主机并可以在服务器上任意安装和管理所需要的组件,因此在应用上有很大的局限性。本文探索的问题是如何用ASP代码将图片上传到WEB服务器并保存在数据库中。
。2技术要点
2.1基本流程在B/S结构中所有的数据传递
工作都通过浏览器与服务器之间的联系加以实现。与单纯发送Form中的文本框数据不同,要传递图片文件首先必须从客户机磁盘中读取要传递的图片文件数据,因此
其基本流程应当是:
1、选取本地图片文件;2、将数据提交到服务器并启动服务器端处理程序;
3、打开数据库并写入图片数据;
4、保存数据库并释放资源。2.2主要对象与方法2.2。1Form数据获取通常ASP使用Request对象来获取Form传递过来的字符数据。获取上传上来的图片文件数据
也可以使用Request对象,但所使用的方法是Request.BinaryReadO。这是用二进制方式获取数据的方式,能够确保数据的原始状态。Request.BinaryRead方法的语法如下:variant=Request.BinaryRead(count)
相关参数:
varian卜变体型变量,存储从客户端获取的数据;
coun卜一指定从客户端获取数据的长度,该值等于方法Request.TotalBytes得到的值。2.2.2向数据库写入长二进制数据与向数据库写入字符和数值数据不同,向数据库写入图片数据时不能使用SQL的Insert语句,
第12届全国计算机在现代科学技术领域应用学术会议论文集
Proceedingsofthe12mChinaSymposium
on
ComputerApplicationinModem
Science&—Techn—ology
而要用ADO的AppendChunk方法对数据库进行操作。该方法将长二进制数据追加到数据库的长二进制字段。AppendChunk方法的语法如下:
object.AppendChunkData相关参数:
obiec卜记录集字段对象;
Data一变体型变量,存储要追加到对象中的数据。
2.2.3从数据库读取长二进制数据这是一个与AppendChunk相对应的ADO方法,即GetChunk方法。该方法可以从Recordset对象的长二进制字段返回数据。GetChunk方法的语法如下:variable=field.OetChunk(Size)相关参数:variable一变体型变量,存储从Recordset对象的长二进制字段返回的数据。
如果检索的字段为空,则GetChunk方法返回Null。
Siz卜长整型表达式,等于所要检索的字节或字符个数。设定Size为大于将检索的数据的长度。
2.2.4向浏览器发送图片利用Response.BinaryWrite方法将服务器上的图片数据以二进制的形式发送到客户端浏览器,由浏览器显示。Response.BinaryWrite方法的语法如下:Response.BinaryWrite相关参数:
data
data—要发送到客户端浏览器中的数据。
3主要程序设计
这里以Microsoft的Access97为例以便于说明。使用其他数据库的设计方法类似。3.1数据库结构1、数据库名为images_db.mdb;
2、表名为images;
3:表images的结构如下:类型字段名称
id
描述主键值用来保存图片数据
自动编号OLE对象
img
3.2上传界面上传界面提供给操作者选择要上传图片文件的Form并执行发送操作。
HTML页面的程序名为
upl
oad.htm,相应代码如下:
<html>
<body>
<center>
<formnalTle=”mainForm”enctype=”multipart/form—data’’action=”irng__process.asp”method=post>
<inputtype=filename=mefile><br><inputtype=submitname=okvalue2”OK'’>
</form>
</center></body></html>
‘
第12届全国计算机在现代科学技术领域应用学术会议论文集
Proceedingsofthe12‘“Chinasymposium
o望』;9rTlputerApplicati!璺!里坚!璺!塑曼!!!!!!垒:!!!!翌21竺墨¥
其中FORM的属性说明enctype=”muttiparffform—data”必须指定。3.3数据处理和存储在服务器端指定的ASP首先要对从浏览器中获取的数据进行必要的处理以剔除冗余数据,然后
将处理过的图片数据保存到数据库中。ASP的程序名为img._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)+4dataend=instrb(datastart+1,formdata,divider)一datastartmydata=midb(fomadam,datastart,dataend)connGraph=server.CreateObject(”ADODB.connection”)connGraph.CoxmectionString=”driver={MicrosoftAccessDriver(木.mdb)};DBQ2”&
set
server.MapPafla(”imagesdb.mdb”)&”;uid=;PWD2;”
connGraph.Open
set
rec=server.createobject(”ADODB.recordset”1
images
whereidisnull",connGraph,1,3
rec.Open”SELECT水FROM
rec.addnew
rec(”img”).appendchunkmydata
rec.update
rec.close
set
。
rec=nothing
setconnGraph=nothing
%>
.
。
3.4显示图片
.
ASP程序img_show.asp将数据库中的图片数据从数据库中读取出来发送到客户端浏览器并由浏
览器显示到网页上面。显示图片需要使用HTML中的<姒G>标签来实现,使用中只需在页面中的相
应位置加