|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
asp是基于web的一种编程技术,可以说是cgi的一种。它可以完成以往cgi程序的所有功能,如计数器、留言簿、公告板、聊天室等等。网页 如今基于WEB页的HTML的编纂器在旧事体系,文章体系顶用得愈来愈广,一个网页一粘就能够坚持本来的款式,同时图片也能够在这个页中坚持。然而在利用过程当中,假如所粘贴页中的图片被删除,就会在本人的页面上留下一个大大的“X”,影响雅观。之前只好把这个图片保留上去,再从头上传到办事器上,如许其实费事。能不克不及让办事器主动去下载图片保留在办事器而且交换页面上的链接?谜底是一定的。
要完成这个功效需求经由三个步调:
一,获得原页中的图片的地址。
办法良多,可以用朋分字符串,也能够用正则婚配。理论证实用正则婚配最为复杂。经由剖析图片的地址都保留在<IMG>标签中。咱们可以先获得一切这个标签。进程以下:
Set objRegExp = New Regexp'设置设置装备摆设对象
objRegExp.IgnoreCase = True’疏忽巨细写
objRegExp.Global = True’设置为全文搜刮
objRegExp.Pattern = "<IMG.+?>"'为了确保能正确地掏出图片地址所以分为两层设置装备摆设:起首找到外面的<IMG>标签,然后再掏出外面的图片地址前面的getimgs函数就是完成后一个功效的。
strs=trim(str)
Set Matches =objRegExp.Execute(strs)’入手下手履行设置装备摆设
For Each Match in Matches
?RetStr = RetStr &getimgs( Match.Value )’履行第二轮的婚配
Next
一切的图片在外面都是如许的src="http://图片的地址",所以可以如许来获得切实的图片地址:
function getimgs(str)
getimgs=""
Set objRegExp1 = New Regexp
objRegExp1.IgnoreCase = True
objRegExp1.Global = True
objRegExp1.Pattern = "http://.+?"""’掏出外面的地址
set mm=objRegExp1.Execute(str)
For Each Match1 in mm
getimgs=getimgs&"||"&left(Match1.Value,len(Match1.Value)-1)’把外面的地址串起来备用
next
end function
获得了一切的图片的地址,咱们就能够停止第二步的操作了。
二,下载图片并保留在办事器上。
这个又可以分为两个步调:一个是获得图片的内容,另外一个是保留在办事器上。获得图片的内容是经由过程上面的函数来完成的:
function getHTTPPage(url)
on error resume next
dim http
set http=server.createobject("MSXML2.XMLHTTP")‘利用xmlhttp的办法来取得图片的内容
Http.open "GET",url,false
Http.send()
if Http.readystate<>4 then
exit function
end if
getHTTPPage=Http.responseBody
set http=nothing
if err.number<>0 then err.Clear
end function
获得了图片的内容要保留,给人一种感到是用FSO来作就能够了,但实践上不可,如许保留法式就会失足,由于FSO不撑持流式的文件,所以咱们要挪用另外一个对象:ADO.STREM。详细的进程以下:
function saveimage(from,tofile)
dim geturl,objStream,imgs
geturl=trim(from)
imgs=gethttppage(geturl)'获得图片的具休内容的进程
Set objStream = Server.CreateObject("ADODB.Stream")'创立ADODB.Stream对象,必需要ADO 2.5以上版本
objStream.Type =1'以二进制形式翻开
objStream.Open
objstream.write imgs'将字符串内容写入缓冲
objstream.SaveToFile server.mappath(tofile),2'-将缓冲的内容写入文件
objstream.Close()'封闭对象
set objstream=nothing
end function
所以只需用一个轮回来把方才获得的地址中的图片全体保留上去,详细进程以下:
arrimg=split(retstr,"||")'朋分字串,获得外面地址列表
allimg=""
newimg=""
for i=1 to ubound(arrimg)
if arrimg(i)<>"" and instr(allimg,arrimg(i))<1 then'看这个图片是不是已下载过
fname=baseurl&cstr(i&mid(arrimg(i),instrrev(arrimg(i),".")))
saveimage(arrimg(i),fname)‘保留地址的函数,进程见下面
allimg=allimg&"||"&arrimg(i)'把保留上去的图片的地址串回起来,以肯定要交换的地址
newimg=newimg&"||"&fname'把当地的地址串回起来
end if
next
第三步就是交换本来的地址了。
详细的进程就是上面了:
arrnew=split(newimg,"||")'获得本来的图片地址列表
arrall=split(allimg,"||")'获得已保留上去的图片的地址列表
for i=1 to ubound(arrnew)'履行轮回交换本来的地址
strs=replace(strs,arrall(i),arrnew(i))
next
cctv=strs
讲到这里,这个函数的根基进程就是如许了,固然可以对它停止改革就能够完成更多的功效,如:加上图片巨细的限制,加上对当地机上的图片下载的限制,以避免形成反复下载图片。同时也应当看到这个函数的缺乏的地方是只能处置静态的图片文件,不克不及合用法式生成的图片。
asp可以使用微软的activeX 使得网页功能无比强大,不过安全性也较差,而且是基于的windows服务器,所以性能稳定性也一般 |
|