ASP网页编程之避免旧事体系里发生渣滓图片的办法
结论:和PHP一样,ASP简单而易于维护,很适合小型网站应用,通过DCOM和MTS技术,ASP甚至还可以完成小规模的企业应用,但ASP的致命缺点就是不支持跨平台的系统,在大型项目开发和维护上非常困难。如今的旧事体系里越多地撑持在线上传拔出图片,以完成在对照好的效果。但是成绩也随之而来了,有的图片传上往后,发明这个图片不合错误,那只能在编纂器里把它删失落,或是,在增加地程中体系呈现成绩,而招致渣滓图片的发生。为了避免在这过程当中呈现渣滓图片和附件,很多人多研讨了很多的办法,如动网论坛里,对上传的每个文件,在数据库里都有响应的一个纪录,如许要占用一个表来寄存,而且假如在增加数据到数据库里时体系呈现非常,也一样没法制止这些渣滓的发生。经由我的一些理论,研讨出我的办法,如今奉献出来,供人人匡正。我的办法流程是如许的:当文章的增加者登录到体系内里后,由体系给它创立一个一时的事情文件夹,如“editor”这个用户的ID是5那我创建一个temp5的一时事情目次,当他增加文章的时分,上传的图片和别的附件其实不存进到真正要显现寄存的目次,而是存在这个一时的事情目次内里。同时为了便利办理,我倡议给每条旧事建一个目次来寄存这些图片,当文章提交的时分,由体系剖析内里的图片地点,把文章内里有的图片转移到这些对应的目次内里往。当旧事或文章修改的时分,就先把这个文件夹上面的一切图片转移到进进的时分的一时事情目次内里,同时对文章内里的图片路径举行交换,保留的时分也是和增加的时分实行统一个历程。当文章删除的时分,也绝对应地把这个目次删失落,这就能够包管了在增加、修正、删除的过程当中没有渣滓图片的发生。当用户登出的时分,体系能够将其所对应的事情目次删除,如许就能够完全地作到没有渣滓的发生。
看到下面这些笔墨形貌大概很多多少人要头晕了,那看一下详细的完成历程吧(由于我对ASP对照熟习,以是我用ASP来完成它了,用别的的平台也是能够完成的)。起首让我先引进我本人写的一个类,用来剖析和转移图片的,具体的申明请看我的另外一篇文章:用asp主动剖析网页中的图片地点,并将其保留到当地服务器(http://www.csdn.net/develop/read_article.asp?id=15585)
classblacksmith
TheClass"blacksmith"isCreatedbyLinzhangChen
Itcoulduseforcopyimagesformotherserverwhichcontainintheweb
dim size,baseurl,basefilename,tofolder,servername,processstr,firstoldimg,firstnewimg
publicFunctionsaveimage(from,tofile)
Dimgeturl,objStream,imgs,s
Ifsize=""Then
size=0
EndIf
geturl=Trim(from)
imgs=getHTTPPage(geturl)
s=size*512
IfLen(imgs)>sThen
SetobjStream=CreateObject("ADODB.Stream")
objStream.Type=1
objStream.Open
objStream.Writeimgs
objStream.SaveToFiletofile,2
objStream.Close
SetobjStream=Nothing
saveimage=True
Else
saveimage=False
EndIf
EndFunction
privateFunctiongetHTTPPage(url)
OnErrorResumeNext
Dimhttp
Sethttp=CreateObject("MSXML2.XMLHTTP")
http.Open"GET",url,False
http.send
Ifhttp.readyState4Then
ExitFunction
EndIf
getHTTPPage=http.responseBody
Sethttp=Nothing
IfErr.Number0ThenErr.Clear
EndFunction
privateFunctiongetimgs(str)
getimgs=""
SetobjRegExp1=NewRegExp
objRegExp1.IgnoreCase=True
objRegExp1.Global=True
objRegExp1.Pattern="http://.+?"""
Setmm=objRegExp1.Execute(str)
ForEachMatch1Inmm
getimgs=getimgs&"||"&Left(Match1.Value,Len(Match1.Value)-1)
Next
EndFunction
Functionstr2img()
Dimservername,objRegExp,strs,Matches,RetStr,arrimg,newimg,i,fname,states,arrnew,arrall
ifbaseurl""then
IfRight(baseurl,1)"/"Then
baseurl=baseurl&"/"
EndIf
endif
ifright(tofolder,1)""then
tofolder=tofolder&""
endif
SetobjRegExp=NewRegExp
objRegExp.IgnoreCase=True
objRegExp.Global=True
objRegExp.Pattern=""
strs=Trim(processstr)
SetMatches=objRegExp.Execute(strs)
ForEachMatchInMatches
RetStr=RetStr&getimgs(Match.Value)
Next
arrimg=Split(RetStr,"||")
allimg=""
newimg=""
Fori=1ToUBound(arrimg)
Ifarrimg(i)""AndInStr(allimg,arrimg(i))<1Then
fname1=baseurl&CStr(basefilename&i&Mid(arrimg(i),InStrRev(arrimg(i),".")))
fname=tofolder&CStr(basefilename&i&Mid(arrimg(i),InStrRev(arrimg(i),".")))
states=saveimage(arrimg(i),fname)
Ifstates=TrueThen
allimg=allimg&"||"&arrimg(i)
newimg=newimg&"||"&fname1
EndIf
EndIf
Next
arrnew=Split(newimg,"||")
arrall=Split(allimg,"||")
Fori=1ToUBound(arrnew)
ifi=1then
firstoldimg=arrall(1)
firstnewimg=arrnew(1)
endif
strs=Replace(strs,arrall(i),arrnew(i))
Next
str2img=strs
EndFunction
endclass
第一步用户登录的时分:因为有一个事情区,以是最好不要让多个用户用统一个帐号否则到时分有人登出的时分,将会形成别的人的事情丧失,这里最次要处置的是帐户登录的时分要对这个帐号锁定不同意反复登录(次要由FSO和数据库来完成,我就未几说了)。
在处置文件上传的时分,能够用稻喷鼻老农的无组件上传,把图片传到事情区中。而且把图片代码前往到编纂器中,当提交今后,将由以下代码来处置这些图片,我这里是依据旧事或文章的ID来创立文件夹的:
sql="selecttop1formnewswhereidisnull"
setrs=server.createobject("adodb.recordset")
rs.opensql,conn,1,3
rs.addnew
rs("userid")=session("myid")由于是新加的,以是先加上一条来获得ID
rs.update
newID=rs("newsid")年夜部分情形下,如许能够获得ID的,但是为了保险起见,以是最好仍是再判别一下了
rs.close
setrs=nothing
ifnewsID=""then
setrs=conn.execute("selecttop1newsidfromnewswhereuserid="&session("myid")&"orderbynewsiddesc")
newsID=rs("newsid")
endif
basefoder=server.mappath("photo")假定图片存到以后目次上面的photo内里
setfso=Server.CreateObject("Scripting.FileSystemObject")
FiLePaTh=basefoder&"/"&newsID
Fso.Createfolder(FiLePaTh)
假定将获得旧事的内容存在变量content内里上面就挪用我的谁人类blacksmith来处置剖析文章的内容,处置图片的转移了
setbs=newblacksmith
bs.size=1
bs.baseurl="photo/"&newsID给图片加上目次的地点
bs.basefilename="mynews"给图片加上前缀
bs.servername=""
bs.tofolder=FiLePaTh
bs.processstr=content
content=bs.str2img
setbs=nothing
接上去就是旧事内容的保留的历程了,我这里就省往了,和别的的体系应当是一样的了
在处置旧事的修正的时分用:
创立事情目次
setfso=Server.CreateObject("Scripting.FileSystemObject")
FiLePaTh=server.mappath("temp"&session("myid"))
IfNotFSO.FolderExists(FiLePaTh)Then
Fso.Createfolder(FiLePaTh)
EndIf
FiLePaTh=basefoder&"/"&newsID
IfFSO.FolderExists(fp)Then
onerrorresumenext
fso.copyfilefp&"*.*",FiLePaTh&""把谁人目次上面的一切文件全拷到事情目次上面,避免呈现修正了不保留,以是先不删除原本的内容
iferr.num>0thenerr.clear
EndIf
setfso=nothing
endif
把原本的文件内容举行处置,改动内里的图片路径,好比说这此内容仍是保留在content内里
content=replace(trim(content,"photo/"&newsID&"/mynews","temp"&session("myid")&"/mynews")这个只是一个对照复杂的交换,信任由此引发误交换的时机应当是相称小的了
保留的历程和增加的历程是一样的,所分歧的是,要先把本来的谁人目次内里的文件清空,我这里就未几说了。
旧事删除的时分,要记住把这个ID绝对应的文件夹删除,在用户登出的时分,也要把它的事情目次清空。
好了,我的全部思绪就是如许的了,说不上是甚么佳构,可是它在实践的使用中,一年上去并没有发生过任何的意常,以是我就把它贴出来了,接待人人和我交流:E_mail:clzwin@sina.com
我想详细了解ASP整站代码与PSP整站代码有什么优缺点,那个更好,更安全,更用容易维护,和管理。。。 跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组 Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点) 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。 交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。 ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
页:
[1]