远程获取内容,并将内容存在本地电脑上,包括任何文件!利用xmlhttp和adodb.stream,酷!绝对原创!

发表于:2007-06-30来源:作者:点击数: 标签:
% ‘’------------------------------------------------------------------------ ‘’-------------------无垠网域:http://www.5inet.net/ --------------------- ‘’-------------------作者:嘻哈呵嘿 ,webmaster@5inet.net ----------------- ‘’---
<%
‘’------------------------------------------------------------------------
‘’-------------------无垠网域:http://www.5inet.net/ ---------------------
‘’-------------------作者:嘻哈呵嘿 ,webmaster@5inet.net -----------------
‘’----------远程获取内容,并将内容存在本地电脑上,包括任何文件!----------
‘’---------------利用xmlhttp和adodb.stream,酷!绝对原创!-----------------
‘’On Error Resume Next
‘’Set the content type to the specific type that you are sending.
‘’Response.ContentType = "IMAGE/JPEG"
‘’-------------------------------定义输出格式-----------------------------

Path=request.querystring("p")
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
End Sub

Sub RemoteFile(sPath)
‘’-------------------------处理远程文件函数------------------------------
    FileName = GetFileName(sPath)
    ‘’-------------GetFileName为把地址转换为合格的文件名过程-------------
    FileName = Server.MapPath("/UploadFile/Cache/" & FileName)
    Set objFso = Server.CreateObject("Scripting.FileSystemObject")
    ‘’Response.Write fileName
    if objFso.FileExists(FileName) Then
    ‘’--------------检查文件是否是已经访问过,如是,则简单跳转------------
        Response.Redirect "/uploadfile/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,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.Open
    objstream.write str
    ‘’--------------------将字符串内容写入缓冲--------------------------
    ‘’response.Write fname
    objstream.SaveToFile "c:\inetpub\myweb\uploadfile\cache\" & fName,adSaveCreateOverWrite
    ‘’--------------------将缓冲的内容写入文件--------------------------
    ‘’response.BinaryWrite objstream.Read
    objstream.Close()
    set objstream = nothing
    ‘’-----------------------关闭对象,释放资源-------------------------
‘’response.Write err.Description
End sub
%>

原文转自:http://www.ltesting.net