web前端

位置:IT落伍者 >> web前端 >> 浏览文章

用XMLHTTP组件解析图片地址并保存


发布日期:2022年10月03日
 
用XMLHTTP组件解析图片地址并保存
现在基于Web页的HTML的编辑器在新闻系统文章系统中用得越来越广一个网页一粘就可以保持原来的样式同时图片也可以在这个页中保持但是在使用过程中如果所粘贴页中的图片被删除就会在自己的页面上留下一个大大的X影响美观以前只好把这个图片保存下来再重新上传到服务器上这样实在麻烦能不能让服务器自动去下载图片保存在服务器并且替换页面上的链接?答案是肯定的

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

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

Set objRegExp = New Regexp设置配置对象

objRegExpIgnoreCase = True忽略大小写

objRegExpGlobal = True设置为全文搜索

objRegExpPattern = <img+?>为了确保能准确地取出图片地址所以分为两层配置首先找到里面的<img>标签然后再取出里面的图片地址后面的getimgs函数就是实现后一个功能的

strs=trim(str)

Set Matches =objRegExpExecute(strs)开始执行配置

For Each Match in Matches

RetStr = RetStr &getimgs( MatchValue )执行第二轮的匹配

Next

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

function getimgs(str)

getimgs=

Set objRegExp = New Regexp

objRegExpIgnoreCase = True

objRegExpGlobal = True

objRegExpPattern = +?取出里面的地址

set mm=objRegExpExecute(str)

For Each Match in mm

getimgs=getimgs&||&left(MatchValuelen(MatchValue))把里面的地址串起来备用

next

end function

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

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

function getHTTPPage(url)

on error resume next

dim http

set (MSXMLXMLHTTP)使用xmlhttp的方法来获得图片的内容

Httpopen GETurlfalse

Httpsend()

if Httpreadystate<> then

exit function

end if

getHTTPPage=HttpresponseBody

set http=nothing

if errnumber<> then errClear

end function

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

function saveimage(fromtofile)

dim geturlobjStreamimgs

geturl=trim(from)

imgs=gethttppage(geturl)取得图片的具休内容的过程

Set objStream = ServerCreateObject(ADODBStream)建立ADODBStream对象必须要ADO 以上版本

objStreamType =以二进制模式打开

objStreamOpen

objstreamwrite imgs将字符串内容写入缓沖

objstreamSaveToFile servermappath(tofile)将缓沖的内容写入文件

objstreamClose()关闭对象

set objstream=nothing

end function

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

arrimg=split(retstr||)分割字串取得里面地址列表

allimg=

newimg=

for i= to ubound(arrimg)

if arrimg(i)<> and instr(allimgarrimg(i))< 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= to ubound(arrnew)执行循环替换原来的地址

strs=replace(strsarrall(i)arrnew(i))

next

cctv=strs

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

上一篇:将改变我们生活的这些XML应用,你知道多少?

下一篇:XML开发入门基础:使用CSS显示XML