|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
asp,jsp,php是web开发的三大技术,asp简单易用且有microsoft做靠山,jsp功能强大是因为有java支持,php则开源跨平台.在国内,asp应用范围最广,jsp发展势头最猛,php则处于劣势.这可能与公司的支持以及技术的培训有关.旧事体系如今的旧事体系里越多地撑持在线上传拔出图片,以完成在对照好的效果。但是成绩也随之而来了,有的图片传上往后,发明这个图片不合错误,那只能在编纂器里把它删失落,或是,在增加地程中体系呈现成绩,而招致渣滓图片的发生。为了避免在这过程当中呈现渣滓图片和附件,很多人多研讨了很多的办法,如动网论坛里,对上传的每个文件,在数据库里都有响应的一个纪录,如许要占用一个表来寄存,而且假如在增加数据到数据库里时体系呈现非常,也一样没法制止这些渣滓的发生。经由我的一些理论,研讨出我的办法,如今奉献出来,供人人匡正。
我的办法流程是如许的:当文章的增加者登录到体系内里后,由体系给它创立一个一时的事情文件夹,如“editor”这个用户的ID是5那我创建一个temp5的一时事情目次,当他增加文章的时分,上传的图片和别的附件其实不存进到真正要显现寄存的目次,而是存在这个一时的事情目次内里。同时为了便利办理,我倡议给每条旧事建一个目次来寄存这些图片,当文章提交的时分,由体系剖析内里的图片地点,把文章内里有的图片转移到这些对应的目次内里往。当旧事或文章修改的时分,就先把这个文件夹上面的一切图片转移到进进的时分的一时事情目次内里,同时对文章内里的图片路径举行交换,保留的时分也是和增加的时分实行统一个历程。当文章删除的时分,也绝对应地把这个目次删失落,这就能够包管了在增加、修正、删除的过程当中没有渣滓图片的发生。当用户登出的时分,体系能够将其所对应的事情目次删除,如许就能够完全地作到没有渣滓的发生。
看到下面这些笔墨形貌大概很多多少人要头晕了,那看一下详细的完成历程吧(由于我对ASP对照熟习,以是我用ASP来完成它了,用别的的平台也是能够完成的)。起首让我先引进我本人写的一个类,用来剖析和转移图片的,具体的申明请看我的另外一篇文章:用asp主动剖析网页中的图片地点,并将其保留到当地服务器(http://www.csdn.net/develop/read_article.asp?id=15585)
classblacksmith
TheClass"blacksmith"isCreatedbyLinzhangChen
Itcoulduseforcopyimagesformotherserverwhichcontainintheweb
dimsize,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="<img.+?>"
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的,可</p>想法是和程序员的想法不一样的.至于为什么.大家去想一想.跟心理学有关的 |
|