远程获取内容,并将内容存在本地电脑上,包括任何文件

该博客展示了一段代码,利用xmlhttp和adodb.stream实现远程获取内容并将其存在本地电脑上。代码可处理本地和远程文件,对于远程文件,会先检查是否已缓存,若未缓存则读取内容并缓存,以便下次访问。
<%
'------------------------------------------------------------------------
'-------------------无垠网域: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
%>down_info.asp?id=45
### 将远程Linux服务器上的文件传输到本地电脑 为了将远程Linux服务器上的文件传输至本地计算机,`scp` 和 `rsync` 是两个非常有效的命令行工具。对于简单的文件或目录复制任务,推荐使用 `scp`;而对于需要增量备份或者同步大量数据的情况,则更适合采用 `rsync`。 当利用 `scp` 进行从远端拉取文件的操作时,基本语法结构如下所示: ```bash scp username@remote_host:/path/to/remote/file /local/path/ ``` 这里需要注意的是,在执行上述指令前应当确保拥有足够的权限读取远程位置以及写入本地目标路径。如果涉及密码验证过程,系统将会提示输入相应用户的认证凭证[^2]。 另外一种情况是在已经建立了SSH连接的情况下尝试下载文件。此时不能直接在已有的SSH会话内部运行SCP命令完成这项工作,而是应该退出当前会话回到本机终端再发起新的SCP请求[^3]。 下面给出具体的例子说明如何运用这两个工具实现文件获取: #### 使用 SCP 获取单个文件 假设要从 IP 地址为 192.168.1.102 的远程主机上取得名为 example.txt 文件保存于本地 home/user/downloads 目录下: ```bash scp yaopan@192.168.1.102:/opt/example.txt ~/downloads/ ``` #### 使用 Rsync 同步整个目录 若需保持两处资料的一致性或是仅想更新变动过的部分文档,那么可以借助 rsync 来达成目的。比如要把位于同一台机器/opt/elklogs 下的所有内容镜像到个人工作站内的特定文件夹里: ```bash rsync -avz --progress yaopan@192.168.1.102:/opt/elklogs/ ~/elk_backup/ ``` 此命令中的选项含义分别为:archive mode (保留属性), verbose output, compress file data during transfer 及显示进度条[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值