使用这个几个函数就可以实现新闻复制来的时候把图片下载到本地,或者小偷到本地等功能.不过由于是使用ServerXMLHTTP组件,所以速度偏慢,不过对于大文件,速度取决还是取决于网络和对方服务器的速度.
不过速度虽慢,但是还是方便很多了.^_^.
在Win200+IIS6.0下测试成功
<%
'# ----------------------------------------------------------------------------
'# 函数:GetHTTPFile
'# 描述:取得远程文件
'# 参数: fFileHTTPPath-文件的网址 fReturnType-返回数据的方式
'# 返回:(1-responseBody 2-responseText 3-responseStream)
'# 作者:雷の龙
'# 日期:2004
'#-----------------------------------------------------------------------------
Function GetHTTPFile(fFileHTTPPath,fReturnType)
'设定脚本运行过期时间,否则大文件下不完
.
Server.scriptTimeout=999999
'设定此函数错误仍然继续,可以在捕获错误的时候处理后继续下面的程序.不过调试的时候
'最好不要用错误仍然继续
'on error resume next
'创建对象
Dim ObjXMLHTTP
Set ObjXMLHTTP=Server.CreateObject("Msxml2.ServerXMLHTTP.4.0")
'设定过期时间防止程序因为文件太大而长久不返回内容
lresolveTimeout = 10000 '解析DNS名字的超时时间,10秒
lconnectTimeout = 10000 '建立Winsock连接的超时时间,10秒
lsendTimeout = 120000 '发送数据的超时时间,120秒
lreceiveTimeout = 10*60000 ' 接收response的超时时间,60*10秒

'请求文件,以异步形式
ObjXMLHTTP.Open "GET",fFileHTTPPath,False
ObjXMLHTTP.send
While ObjXMLHTTP.readyState <> 4
ObjXMLHTTP.waitForResponse 1000
Wend
'得到结果
Dim ResultStr
Select Case fReturnType
Case 1
ResultStr=ObjXMLHTTP.responseBody
Case 2
ResultStr=ObjXMLHTTP.responseText
Case 3
ResultStr=ObjXMLHTTP.responseStream
Case Else
End Select
'释放对象
Set ObjXMLHTTP=Nothing
'返回函数
GetHTTPFile=ResultStr
End Function
'# ----------------------------------------------------------------------------
'# 函数:SaveFileTo
'# 描述:保存文件
'# 参数: fFileContent-文件内容,fFilePath-文件保存路径
'# 返回:
'# 作者:雷の龙
'# 日期:2004
'#-----------------------------------------------------------------------------
Function SaveFileTo(fFileContent,fFilePath)
Set HTTPFile = Server.CreateObject("Adodb.Stream")
With HTTPFile
.Type = 1
.Open
.Write fFileContent
.SaveToFile fFilePath,2
.Cancel()
.Close()
End With
Set HTTPFile=nothing
End Function
'# ----------------------------------------------------------------------------
'# 函数:SaveHTTPFile
'# 描述:保存网络上的文件
'# 参数: fFileHTTPPath-网址 fFileSavePath-保存文件的相对路径
'fFileSaveName-存储的文件名
'# 返回:执行时间:单位秒
'# 作者:雷の龙
'# 日期:2004
'#-----------------------------------------------------------------------------
Function SaveHTTPFile(fFileHTTPPath,fFileSavePath,fFileSaveName)
'记录程序开始的时间
Dim BeginTime
BeginTime=Timer()
'取得文件的内容
Dim FileValue
FileValue=GetHTTPFile(fFileHTTPPath,1)
'取得文件名
If fFileSaveName<>"" Then
fFileSavePath=fFileSavePath&"/"&fFileSaveName
Else
fFileSavePath=fFileSavePath&"/"&Mid(fFileHTTPPath,InStrRev(fFileHTTPPath,"/")+1)
End If
'保存到本地
Call SaveFileTo(FileValue,Server.MapPath(fFileSavePath))
'记录程序运行结束的时间
Dim EndTime
EndTime=Timer()
'返回运行时间
SaveHTTPFile=EndTime-BeginTime
End Function
%>
主要是调用SaveHTTPFile函数,下面是调用示例
<%
Response.Write SaveHTTPFile("http://202.104.242.148/z/2337.swf",".","")
%>
这篇博客介绍了如何利用ASP结合ServerXMLHTTP组件,将网络上的文件保存到本地服务器。虽然速度较慢,但适用于新闻图片下载和数据抓取等场景,在Windows 2003 + IIS 6.0环境下已验证成功。
272

被折叠的 条评论
为什么被折叠?



