利用xmlhttp和adodb.stream加緩衝技術下載遠程Web檔案

來源:互聯網
上載者:User
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
%>

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。