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

来源:asp之家 时间:2009-04-23 18:33:00 

研究了几天Adodb.stream和XMLHTTP的应用,找了不少很有趣的教程,下面的代码是将一个远程的页面,图片地址保存到本地的实例。

  将代码保存为一个.ASP的文件,将它放到IIS的一个目录下,在它的上级见一个cache目录,下载后的文件将保存到cache目录下。

  fso.Asp?path=https://www.aspxhome.com/images/logo.gif
  你就可以将https://www.aspxhome.com/images/logo.gif文件保存下来。
  学小偷的朋友也可以看看。。


'----------远程获取内容,并将内容存在本地电脑上,包括任何文件!----------
'---------------利用xmlhttp和adodb.stream-----------------
'On Error Resume Next
'-------------------------------定义输出格式-----------------------------
path=request("path")
if path ="" then
path="http://www.baidu.com/index.html"
'这里定义的网址是百度,,注意一定要有文件后缀
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 "d:/web/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


标签:xmlhttp,stream,缓存,远程
0
投稿

猜你喜欢

  • Oracle数据库系统紧急故障处理方法

    2010-07-26 12:57:00
  • 关于xmlhttp乱码的解决方法

    2008-09-24 17:20:00
  • Web 标准设计实践:Google 的首页

    2008-10-12 12:14:00
  • Web标准在中国

    2008-11-26 11:27:00
  • 这十大Python库你真应该知道

    2022-09-20 00:09:03
  • SQL Server如何实现快速删除重复记录?

    2011-05-03 11:18:00
  • MySQL关键字Distinct的详细介绍

    2024-01-27 11:44:47
  • Django模板报TemplateDoesNotExist异常(亲测可行)

    2023-11-02 18:53:49
  • GO语言入门Golang进入HelloWorld

    2024-05-09 09:32:12
  • 用ASP实现在线压缩与解压缩

    2007-09-29 12:13:00
  • javascript如何实现360度全景照片问题汇总

    2024-04-10 10:43:38
  • python枚举类型定义与使用讲解

    2021-04-11 08:55:42
  • 一文带你搞懂JS中导入模块import和require的区别

    2023-07-21 03:24:18
  • SQL查询效率注意事项小结

    2012-01-05 19:31:25
  • ASP利用XMLHTTP实现表单提交以及cookies的发送的代码

    2011-04-15 10:37:00
  • vue 集成jTopo 处理方法

    2024-05-09 15:17:42
  • 解析php session_set_save_handler 函数的用法(mysql)

    2023-11-17 21:58:28
  • 详解python实现识别手写MNIST数字集的程序

    2021-05-01 13:17:40
  • OpenCV学习记录python实现连通域处理函数

    2023-05-01 05:53:24
  • golang gorm 结构体的表字段缺省值设置方式

    2024-04-28 09:13:53
  • asp之家 网络编程 m.aspxhome.com