您的位置: 泰安资讯网 > 美食

要实现这个功能需要经过三个步骤

发布时间:2019-11-22 20:45:54

  09:55 来源:页教学 :阿小【纠错】人评论

  A-A+ 怎么开淘宝店 站优化方法 创业如何获得投资 小米note顶配版评测 最新LOL活动

  现在基于WEB页的HTML的器在系统,文章系统中用得越来越广,一个页一粘就可以保持原来的样式,同时图片也可以在这个页中保持。但是在使用过程中,如果所粘贴页中的图片被删除,就会在自己的页面上留下一个大大的X,影响美观。以前只好把这个图片保存下来,再重新上传到服务器上,这样实在麻烦。能不能让服务器自动去下载图片保存在服务器并且替换页面上的链接?答案是肯定的。

  要实现这个功能需要经过三个步骤:

  一、取得原页中的图片的地址。

  方法很多,可以用分割字符串,也可以用正则匹配。实践证明用正则匹配最为简单。经过分析图片的地址都保存在IMG标签中。我们可以先取得所有这个标签。过程如下:

  以下为引用的内容:Set objRegExp = New Regexp'设置配置对象noreCase = True忽略大小写obal = True设置为全文搜索ttern = IMG.+?'为了确保能准确地取出图片地址所以分为两层配置:首先找到里面的IMG标签,然后再取出里面的图片地址后面的getimgs函数就是实现后一个功能的。strs=trim(str)Set Matches =ecute(strs)开始执行配置For Each Match in Matches?RetStr = RetStr getimgs( lue )执行第二轮的匹配Next

  所有的图片在里面都是这样的src=://图片的地址,所以可以这样来取得确切的图片地址:

  以下为引用的内容:function getimgs(str)getimgs=Set objRegExp1 = New noreCase = obal = ttern = ://.+?取出里面的地址set mm=ecute(str)For Each Match1 in mmgetimgs=getimgs||left(luelen(lue)-1)把里面的地址串起来备用nextend function

  取得了所有的图片的地址,我们就可以进行第二步的操作了。

  二、下载图片并保存在服务器上。

  这个又可以分为两个步骤:一个是取得图片的内容,另一个是保存在服务器上。取得图片的内容是通过下面的函数来实现的:

  以下为引用的内容:function getHTTPPage(url)on error resume nextdim set =eateobject(LHTTP)使用xml的方法来获得图片的内容en nd()if adystate4 then exit functionend ifgetHTTPPage=sponseBodyset =nothingif mber0 then ear end function

  取得了图片的内容要保存,给人一种感觉是用FSO来作就可以了,但实际上不行,这样保存程序就会出错,因为FSO不支持流式的文件,所以我们要调用另一个对象:REM。具体的过程如下:

  以下为引用的内容:function saveimage(fromtofile)dim geturlobjStreamimgsgeturl=trim(from)imgs=getpage(geturl)'取得图片的具休内容的过程Set objStream = eateObject(ream)'建立ream对象,必须要ADO 2.5以上版本pe =1'以二进制模式打开ite imgs'将字符串内容写入缓冲veToFile ppath(tofile)2'-将缓冲的内容写入文件ose()'关闭对象set objstream=nothingend function

  所以只要用一个循环来把刚才取得的地址中的图片全部保存下来,具体过程如下:

  以下为引用的内容:arrimg=split(retstr||)'分割字串,取得里面地址列表allimg=newimg=for i=1 to ubound(arrimg)if arrimg(i) and instr(allimgarrimg(i))1 then'看这个图片是否已经下载过fname=baseurlcstr(imid(arrimg(i)instrrev(arrimg(i).)))saveimage(arrimg(i)fname)保存地址的函数,过程见上面allimg=allimg||arrimg(i)'把保存下来的图片的地址串回起来,以确定要替换的地址newimg=newimg||fname'把本地的地址串回起来end ifnext

  第三步就是替换原来的地址了。

  具体的过程就是下面了:

  以下为引用的内容:arrnew=split(newimg||)'取得原来的图片地址列表arrall=split(allimg||)'取得已经保存下来的图片的地址列表for i=1 to ubound(arrnew)'执行循环替换原来的地址strs=replace(strsarrall(i)arrnew(i))nextcctv=strs

  讲到这里,这个函数的基本过程就是这样了,当然可以对它进行改造就可以实现更多的功能,如:加上图片大小的限制,加上对本地机上的图片下载的限制,以免造成重复下载图片。同时也应该看到这个函数的不足之处是只能处理静态的图片文件,不能适用程序生成的图片。

  查看更多相似文章

悬疑灵异
检测设备
爱情笑话
猜你会喜欢的
猜你会喜欢的