background image

  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