利用xmlhttp和adodb.stream加缓存技术下载远程Web文件

  <%

  '----------远程获取内容,并将内容存在本地电脑上,包括任何文件!----------

  '---------------利用xmlhttp和adodb.stream-----------------

  'On Error Resume Next

  '-------------------------------定义输出格式-----------------------------

  path=request("path")

  if path ="" then

  path="http://pcqc.86516.com/index.asp"

  '这里定义的网址是百度,,注意一定要有文件后缀

  end if

  sPath = Path

  if left(lcase(path),7) <> "http://" then

  '-------------如果前面没有http就是本地文件,交给LocalFile处理------------

  LocalFile(path)

  else

  '--------------------否则为远程文件,交给RemoteFile处理------------------

  RemoteFile(Path)

  end if

  'Response.Write err.Description

  '--------------处理函数-----------

  sub LocalFile(Path)

  '-------------------如果为本地文件则简单的跳转到该页面-------------------

  'Response.Redirect Path

  Response.write "发生错误!"

  End Sub

  Sub RemoteFile(sPath)

  '-------------------------处理远程文件函数------------------------------

  FileName = GetFileName(sPath)

  '-------------GetFileName为把地址转换为合格的文件名过程-------------

  FileName = Server.MapPath("Cache/" & FileName)

  Set objFso = Server.CreateObject("Scripting.FileSystemObject")

  'Response.Write fileName

  if objFso.FileExists(FileName) Then

  '--------------检查文件是否是已经访问过,如是,则简单跳转------------

  Response.Redirect "cache/" & GetFileName(path)

  Else

  '----------------否则的话就先用GetBody函数读取----------------------

  'Response.Write Path

  t = GetBody(Path)

  '-----------------用二进制方法写到浏览器上--------------------------

  Response.BinaryWrite t

  Response.Flush

  '-----------------输出缓冲------------------------------------------

  SaveFile t,GetFileName(path)

  '------------------将文件内容缓存到本地路径,以待下次访问-----------

  End if

  Set objFso = Nothing

  End Sub

  Function GetBody(url)

  '-----------------------本函数为远程获取内容的函数---------------------

  'on error resume next

  'Response.Write url

  Set Retrieval = CreateObject("Microsoft.XMLHTTP")

  '----------------------建立XMLHTTP对象-----------------------------

  With Retrieval

  .Open "Get", url, False, "", ""

  '------------------用Get,异步的方法发送-----------------------

  .Send

  'GetBody = .ResponseText

  GetBody = .ResponseBody

  '------------------函数返回获取的内容--------------------------

  End With

  Set Retrieval = Nothing

  'response.Write err.Description

  End Function

  Function GetFileName(str)

  '-------------------------本函数为合格化的文件名函数-------------------

  str = Replace(lcase(str),"http://","")

  str = Replace(lcase(str),"//","/")

  str = Replace(str,"?","")

  str = Replace(str,"&","")

  str = Replace(str,"/","")

  str = replace(str,vbcrlf,"")

  GetFileName = str

  End Function

  sub SaveFile(str,fName)

  '-------------------------本函数为将流内容存盘的函数-------------------

  'on error resume next

  Set objStream = Server.CreateObject("ADODB.Stream")

  '--------------建立ADODB.Stream对象,必须要ADO 2.5以上版本---------

  'objStream.Type = adTypeBinary

  objStream.Type = 1

  '-------------以二进制模式打开-------------------------------------

  objStream.Open

  objstream.write str

  '--------------------将字符串内容写入缓冲--------------------------

  'response.Write fname

  '路径注意

  objstream.SaveToFile "E:\webroot\pcqc\vip\UploadFile\cache\"&fName,2

  'objstream.SaveToFile "d:\cache\" & fName,adSaveCreateOverWrite

  '--------------------将缓冲的内容写入文件--------------------------

  'response.BinaryWrite objstream.Read

  objstream.Close()

  set objstream = nothing

  '-----------------------关闭对象,释放资源-------------------------

  'response.Write err.Description

  End sub

  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

  %>