ASP编程:ASP完成图片上存
ASP脚本是采用明文(plain text)方式来编写的。 用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中,对应的布局以下:
字段称号 类型 描写
id int(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*FROMwhereidisnull",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")&</p>对用户来说可预见费用、节约费用,可以做到花少钱办大事。由于省去了购买软件和硬件等的前期费用,用户可以租用较高级的应用软件。ASP的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。 先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习 如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。 接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。 没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。 ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。 Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write 学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点: 尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。 Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名") 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。 跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组 Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件 你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件) 你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
页:
[1]