|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。如今基于WEB页的HTML的编纂器在旧事体系,文章体系顶用得愈来愈广,一个网页一粘就能够坚持本来的款式,同时图片也能够在这个页中坚持。可是在利用过程当中,假如所粘贴页中的图片被删除,就会在本人的页面上留下一个年夜年夜的“X”,影响美妙。之前只好把这个图片保留上去,再从头上传到服务器上,如许其实贫苦。能不克不及让服务器主动往下载图片保留在服务器而且交换页面上的链接?谜底是一定的。
要完成这个功效必要经由三个步骤:
一,获得原页中的图片的地点。办法良多,能够用支解字符串,也能够用正则婚配。理论证实用正则婚配最为复杂。经由剖析图片的地点都保留在<img>标签中。我们能够先获得一切这个标签。历程以下:
SetobjRegExp=NewRegexp设置设置工具
objRegExp.IgnoreCase=True’疏忽巨细写
objRegExp.Global=True’设置为全文搜刮
objRegExp.Pattern="<img.+?>"为了确保能正确地掏出图片地点以是分为两层设置:起首找到内里的<img>标签,然后再掏出内里的图片地点前面的getimgs函数就是完成后一个功效的。
strs=trim(str)
SetMatches=objRegExp.Execute(strs)’入手下手实行设置
ForEachMatchinMatches
RetStr=RetStr&getimgs(Match.Value)’实行第二轮的婚配
Next
一切的图片在内里都是如许的src="http://图片的地点",以是能够如许来获得切实的图片地点:
functiongetimgs(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
获得了一切的图片的地点,我们就能够举行第二步的操纵了。
二,下载图片并保留在服务器上。这个又能够分为两个步骤:一个是获得图片的内容,另外一个是保留在服务器上。获得图片的内容是经由过程上面的函数来完成的:
functiongetHTTPPage(url)
onerrorresumenext
dimhttp
sethttp=server.createobject("MSXML2.XMLHTTP")‘利用xmlhttp的办法来取得图片的内容
Http.open"GET",url,false
Http.send()
ifHttp.readystate4then
exitfunction
endif
getHTTPPage=Http.responseBody
sethttp=nothing
iferr.number0thenerr.Clear
endfunction
获得了图片的内容要保留,给人一种感到是用FSO来作就能够了,但实践上不可,如许保留程序就会堕落,由于FSO不撑持流式的文件,以是我们要挪用另外一个工具:ADO.STREM。详细的历程以下:
functionsaveimage(from,tofile)
dimgeturl,objStream,imgs
geturl=trim(from)
imgs=gethttppage(geturl)获得图片的具休内容的历程
SetobjStream=Server.CreateObject("ADODB.Stream")创建ADODB.Stream工具,必需要ADO2.5以上版本
objStream.Type=1以二进制形式翻开
objStream.Open
objstream.writeimgs将字符串内容写进缓冲
objstream.SaveToFileserver.mappath(tofile),2-将缓冲的内容写进文件
objstream.Close()封闭工具
setobjstream=nothing
endfunction
以是只需用一个轮回来把方才获得的地点中的图片全体保留上去,详细历程以下:
arrimg=split(retstr,"||")支解字串,获得内里地点列表
allimg=""
newimg=""
fori=1toubound(arrimg)
ifarrimg(i)""andinstr(allimg,arrimg(i))<1then看这个图片是不是已下载过
fname=baseurl&cstr(i&mid(arrimg(i),instrrev(arrimg(i),".")))
saveimage(arrimg(i),fname)‘保留地点的函数,历程见下面
allimg=allimg&"||"&arrimg(i)把保留上去的图片的地点串回起来,以断定要交换的地点
newimg=newimg&"||"&fname把当地的地点串回起来
endif
next
第三步就是交换本来的地点了。详细的历程就是上面了:
arrnew=split(newimg,"||")获得本来的图片地点列表
arrall=split(allimg,"||")获得已保留上去的图片的地点列表
fori=1toubound(arrnew)实行轮回交换本来的地点
strs=replace(strs,arrall(i),arrnew(i))
next
cctv=strs
讲到这里,这个函数的基础历程就是如许了,固然能够对它举行改革就能够完成更多的功效,如:加上图片巨细的限定,加上对当地机上的图片下载的限定,以避免形成反复下载图片。同时也应当看到这个函数的不敷的地方是只能处置静态的图片文件,不克不及合用程序天生的图片。
缺点:正版成本价格贵(盗版就不说了)、不够安全,大多数服务器用windows系统,没有linux安全 |
|