王朝网络
分享
 
 
 

ASP实现图片上存

王朝asp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

用ASP编写网站应用程序时间长了,难免会遇到各式各样的问题,其中关于如何上传文件到服

务器恐怕是遇见最多的问题了,尤其是上传图片,比如你想要在自己的社区里面实现类似网易

虚拟社区提供的“每日一星”的功能,就要提供给网友上传照片的功能。上传图片文件到服务

器可以使用各种免费的文件上传组件,使用起来功能虽然很强大,但是由于很多情况下,我们

只能使用免费的支持ASP的空间或者租用别人的虚拟空间,对于第一种情况,我们根本就没

有可能来使用文件上传组件;至于第二种情况,我们也要付出不少的“银子”才可以。除非你

拥有自己的虚拟主机,你就可以随便的在服务器上面安装自己所需要的组件,这种情况对于大

多数人来说是可望而不可及的。那我们就没有办法了吗?呵呵,答案是肯定的(当然是肯定的

了,要不然我也没法写出这篇文章啊)。下面就让我们一起来使用纯ASP代码来实现图片的

上传以及保存到数据库的功能(顺便也实现显示数据库中的图片到网页上的功能)。

首先我们先来熟悉一下将要使用的对象方法。我们用来获取上一个页面传递过来的数据一

般是使用Request对象。同样的,我们也可以使用Request对象来获取上传上来的文件数据,使

用的方法是Request.BinaryRead()。而我们要从数据库中读出来图片的数据显示到网页上面要

用到的方法是:

Request.BinaryWrite()。在我们得到了图片的数据,要保存到数据库中的时候,不可以直接

使用Insert语句对数据库进行操作,而是要使用ADO的AppendChunk方法,同样的,读出数据库

中的图片数据,要使用GetChunk方法。各个方法的具体语法如下:

*Request.BinaryRead语法:

variant=Request.BinaryRead(count)

参数

variant

返回值保存着从客户端读取到数据。

count

指明要从客户端读取的数据量大小,这个值小于或者等于使用方法Request.TotalBytes得到的

数据量。

*Request.BinaryWrite语法:

Request.BinaryWritedata

参数

data

要写入到客户端浏览器中的数据包。

*Request.TotalBytes语法:

variant=Request.TotalBytes

参数

variant

返回从客户端读取到数据量的字节数。

*AppendChunk语法

将数据追加到大型文本、二进制数据Field或Parameter对象。

object.AppendChunkData

参数

objectField或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将把调用解释为新的GetChu

nk操作并从记录的起始处开始读取。如果其他Recordset对象不是首个Recordset对象的副本,

则访问其中的字段不会破坏GetChunk操作。

如果Field对象的Attributes属性中的adFldLong位设置为True,则可以对该字段使用GetChun

k方法。

如果在Field对象上使用Getchunk方法时没有当前记录,将产生错误3021(无当前记录)。

接下来,我们就要来设计我们的数据库了,作为测试我们的数据库结构如下(access200

0):

字段名称类型描述

id自动编号主键值

img OLE对象用来保存图片数据

对于在MSSQLServer7中,对应的结构如下:

字段名称类型描述

idint(Identity) 主键值

img image 用来保存图片数据

现在开始正式编写我们的纯ASP代码上传部分了,首先,我们有一个提供给用户的上传界面

,可以让用户选择要上传的图片。代码如下

(upload.htm):

<html>

<body>

<center>

<form name="mainForm" enctype="multipart/form-data" action="process.asp" method=p

ost>

<inputtype=filename=mefile><br>

<inputtype=submitname=okvalue="OK">

</form>

</center>

</body>

</html>

注意enctype="multipart/form-data",一定要在Form中有这个属性,否则,将无法得到上传

上来的数据。接下来,我们要在process.asp中对从浏览器中获取的数据进行必要的处理,因

为我们在process.asp中获取到的数据不仅仅包含了我们想要的上传上来的图片的数据,也包

含了其他的无用的信息,我们需要剔除冗余数据,并将处理过的图片数据保存到数据库中,这

里我们以access2000为例。具体代码如下(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)

setconnGraph=server.CreateObject("ADODB.connection")

connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&server.Ma

pPath("images.mdb")&";uid=;PWD=;"

connGraph.Open

setrec=server.createobject("ADODB.recordset")

rec.Open"SELECT*FROM[images]whereidisnull",connGraph,1,3

rec.addnew

rec("img").appendchunkmydata

rec.update

rec.close

setrec=nothing

setconnGraph=nothing

%>

好了,这下我们就把上传来的图片保存到了名为images.mdb的数据库中了,剩下的工作就是要

将数据库中的图片数据显示到网页上面了。一般在HTML中,显示图片都是使用<IMG>标签

,也就是<IMGSRC="图片路径">,但是我们的图片是保存到了数据库中,“图片路径”是什么

呢?呵呵,其实这个SRC属性除了指定路径外,也可以这样使用哦:

<IMGSRC="showimg.asp?id=xxx">

所以,我们所要做的就是在showimg.asp中从数据库中读出来符合条件的

数据,并返回到SRC属性中就可以了,具体代码如下(showimg.asp):

<%

setconnGraph=server.CreateObject("ADODB.connection")

connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&

server.MapPath("images.mdb")&";uid=;PWD=;"

connGraph.Open

setrec=server.createobject("ADODB.recordset")

strsql="selectimgfromimageswhereid="&trim(request("id"))

rec.openstrsql,connGraph,1,1

Response.ContentType="image/*"

Response.BinaryWriterec("img").getChunk(7500000)

rec.close

setrec=nothing

setconnGraph=nothing

%>

注意在输出到浏览器之前一定要指定Response.ContentType="image/*",

以便正常显示图片。

最后要注意的地方是,我的process.asp中作的处理没有考虑到第一页(upload.htm)中还有其

他数据,比如<INPUT type=tesxt name=userid>等等,如果有这些项目,你的process.asp就

要注意处理掉不必要的数据。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有