Welcome

首页 / 网页编程 / ASP / 利用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:webrootpcqcvipUploadFilecache"&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
%>