|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ASP脚本是采用明文(plaintext)方式来编写的。用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将把挪用注释为新的GetChunk操纵并从纪录的肇端处入手下手读取。假如其他Recordset工具不是首个Recordset工具的正本,则会见个中的字段不会损坏GetChunk操纵。假如Field工具的Attributes属性中的adFldLong位设置为True,则能够对该字段利用GetChunk办法。假如在Field工具上利用Getchunk办法时没有以后纪录,将发生毛病3021(无以后纪录)。接上去,我们就要来计划我们的数据库了,作为测试我们的数据库布局以下(Access97):
字段称号 范例 形貌
id 主动编号 主键值
imgOLE工具 用来保留图片数据
关于在MSSQLServer7中,对应的布局以下:
字段称号 范例 形貌
id int(Identity) 主键值
img image 用来保留图片数据
如今入手下手正式编写我们的纯ASP代码上传部分了,起首,我们有一个供应给用户的上传界面,可让用户选择要上传的图片。代码以下
(upload.htm):
<html>
<body>
<center>
<formname="mainForm"enctype="multipart/form-data"
action="process.asp"method=post>
<inputtype=filename=mefile>
<inputtype=submitname=okvalue="OK">
</form>
</center>
</body>
</html>
注重代码中玄色斜体的部分,必定要在Form中有这个属性,不然,将没法失掉上传下去的数据。
接上去,我们要在process.asp中对从扫瞄器中猎取的数据举行需要的处置,由于我们在process.asp中猎取到的数据不单单包括了我们想要的上传下去的图片的数据,也包括了其他的无用的信息,我们必要剔除冗余数据,并将处置过的图片数据保留到数据库中,这里我们以Access97为例。详细代码以下(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.MapPath("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中,显现图片都是利用标签,也就是,可是我们的图片是保留到了数据库中,“图片路径”是甚么呢?呵呵,实在这个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)中另有其他数据,好比<INPUTtype=tesxtname=userid>等等,假如有这些项目,你的process.asp就要注重处置失落不用要的数据。怎样,实在上传图片并保留到数据库很复杂吧,如许不再用为本人的空间没法利用各种的上传组件忧愁了吧。还等甚么?从速试一试吧。
(以上一切程序均在WinNT4.0英文版,IIS4,Access97/MSSQLServer7.0中运转经由过程)
由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。 |
|