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

ado|stream|web|xml|缓存|下载

研究了几天Adodb.stream和XMLHTTP的应用,
找了不少很有趣的教程,
下面的代码是将一个远程的页面,图片地址保存到本地的实例。
将代码保存为一个.ASP的文件,
将它放到IIS的一个目录下,在它的上级见一个cache目录,
下载后的文件将保存到cache目录下

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

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

sPath=Path
ifleft(lcase(path),7)<>"http://"then
'-------------如果前面没有http就是本地文件,交给LocalFile处理------------
LocalFile(path)
else
'--------------------否则为远程文件,交给RemoteFile处理------------------
RemoteFile(Path)
endif
'Response.Writeerr.Description
'--------------处理函数-----------

subLocalFile(Path)
'-------------------如果为本地文件则简单的跳转到该页面-------------------
'Response.RedirectPath
Response.write"发生错误!"
EndSub

SubRemoteFile(sPath)
'-------------------------处理远程文件函数------------------------------
FileName=GetFileName(sPath)
'-------------GetFileName为把地址转换为合格的文件名过程-------------
FileName=Server.MapPath("/Cache/"&FileName)
SetobjFso=Server.CreateObject("Scripting.FileSystemObject")
'Response.WritefileName
ifobjFso.FileExists(FileName)Then
'--------------检查文件是否是已经访问过,如是,则简单跳转------------
Response.Redirect"/cache/"&GetFileName(path)
Else
'----------------否则的话就先用GetBody函数读取----------------------
'Response.WritePath
t=GetBody(Path)
'-----------------用二进制方法写到浏览器上--------------------------
Response.BinaryWritet
Response.Flush
'-----------------输出缓冲------------------------------------------
SaveFilet,GetFileName(path)
'------------------将文件内容缓存到本地路径,以待下次访问-----------
Endif
SetobjFso=Nothing
EndSub

FunctionGetBody(url)
'-----------------------本函数为远程获取内容的函数---------------------
'onerrorresumenext
'Response.Writeurl
SetRetrieval=CreateObject("Microsoft.XMLHTTP")
'----------------------建立XMLHTTP对象-----------------------------
WithRetrieval
.Open"Get",url,False,"",""
'------------------用Get,异步的方法发送-----------------------
.Send
'GetBody=.ResponseText
GetBody=.ResponseBody
'------------------函数返回获取的内容--------------------------
EndWith
SetRetrieval=Nothing
'response.Writeerr.Description
EndFunction

FunctionGetFileName(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
EndFunction

subSaveFile(str,fName)
'-------------------------本函数为将流内容存盘的函数-------------------
'onerrorresumenext
SetobjStream=Server.CreateObject("ADODB.Stream")
'--------------建立ADODB.Stream对象,必须要ADO2.5以上版本---------
'objStream.Type=adTypeBinary
objStream.Type=1
'-------------以二进制模式打开-------------------------------------
objStream.Open
objstream.writestr
'--------------------将字符串内容写入缓冲--------------------------
'response.Writefname
'路径注意
objstream.SaveToFile"d:/web/cache/"&fName,2
'objstream.SaveToFile"d:cache"&fName,adSaveCreateOverWrite
'--------------------将缓冲的内容写入文件--------------------------
'response.BinaryWriteobjstream.Read
objstream.Close()
setobjstream=nothing
'-----------------------关闭对象,释放资源-------------------------
'response.Writeerr.Description
Endsub

functionsaveimage(from,tofile)
dimgeturl,objStream,imgs
geturl=trim(from)
imgs=gethttppage(geturl)'取得图片的具休内容的过程
SetobjStream=Server.CreateObject("ADODB.Stream")'建立ADODB.Stream对象,必须要ADO2.5以上版本
objStream.Type=1'以二进制模式打开
objStream.Open
objstream.writeimgs'将字符串内容写入缓冲
objstream.SaveToFileserver.mappath(tofile),2'-将缓冲的内容写入文件
objstream.Close()'关闭对象
setobjstream=nothing
endfunction
%>

时间: 2024-11-02 06:24:24

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

利用xmlhttp和adodb.stream加缓存技术下载远程Web文件_小偷/采集

<%'----------远程获取内容,并将内容存在本地电脑上,包括任何文件!----------'---------------利用xmlhttp和adodb.stream-----------------'On Error Resume Next'-------------------------------定义输出格式-----------------------------path=request("path")if path ="" thenpath

利用MSXML2.XmlHttp和Adodb.Stream采集图片_小偷/采集

利用MSXML2.XmlHttp和Adodb.Stream 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml">  <

利用MSXML2.XmlHttp和Adodb.Stream采集图片

利用MSXML2.XmlHttp和Adodb.Stream 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml">  <

实践xml缓存技术构建高性能web站点

打造一个高性能稳定的web站点一直是站长和程序员的梦想,本文用作者的一次亲身经历的来说说如何利用xml缓存技术实现站点的高性能.我是从今年开始做138手机主题网的,采用SQL2000做为数据库,开发语言用的是Asp,查询的时候都是动态查询,直接用like %的方式,那个时候反正一天的访问量小,同时在线的时候也就几十个人而已,所以服务器也就能胜任要求,随着访问量慢慢增加,当同时在线达到几百人时,此时服务器开始不堪重负,CPU常常达到100%不降,网页打开速度也超级慢,一个查询页面需要几秒钟甚至更长

关于Adodb.Stream的写数据库数据到客户端文件的实践

ado|stream|客户端|数据|数据库 这是一个从服务器数据库直接下数据到客户端文件的例子,文件名和扩展名可以根据需要随便写.new/temp.htm要求真实存在,其实没有什么作用,只是引导一下,否则不能对stram数据进行写操作.网络上流传的这方面的东西不少,但多数是copy来的,很简单的事情搞得那么复杂.真正经过实践的东东少得可怜.于是自己写了一个,虽然简单,也有些问题,但是copy下去就可以用了.有问题的朋友可以跟我联系,好一起学习. filemystream=server.mappa

ASP中利用ADODB.Stream对象将字节流转换为字符流

'--------------------------------------------------------------------' 二进制转字符串'' 入口参数:字节流' 函数返回:字符串' Code By:Madpolice 2002-12-20' 利用 ADODB.Stream 对象,速度比原来的字符替换法快了n倍,n≈30!!)'--------------------------------------------------------------------'下面的常量是函

利用XMLHTTP技术为Donews Blog添加最新文章列表

xml     Donews Blog的多数模版都没有显示最新文章列表的功能,下面是利用XMLHTTP技术实现这个功能的思路和代码,效果见左侧的"最新文章"一栏.因为Donews Blog和Discuz论坛一样,不同的模版各搞各的,无法给出统一的变量名(HTML Tag的ID值),因此需要在代码的基础上用CSS修饰以产生合适的效果. 思路和技术背景 思路很单纯,直接用XMLHTTP读出Blog的RSS文件,取出最新的文章插入到提前准备好的HTML Tag中即可. XMLHTTP是微软上

利用AdoDb.Stream对象来读取UTF-8格式的文本文件_应用技巧

复制代码 代码如下: '函数名称:ReadTextFile     '作用:利用AdoDb.Stream对象来读取UTF-8格式的文本文件     '----------------------------------------------------     Function ReadFromTextFile (FileUrl,CharSet)         If FileUrl = "" OR IsNull(FileUrl) Then             ReadFromT

利用AdoDb.Stream对象来读取UTF-8格式的文本文件

复制代码 代码如下: '函数名称:ReadTextFile     '作用:利用AdoDb.Stream对象来读取UTF-8格式的文本文件     '----------------------------------------------------     Function ReadFromTextFile (FileUrl,CharSet)         If FileUrl = "" OR IsNull(FileUrl) Then             ReadFromT