|
<%
'------------------------------------------------------------------------
'-------------------无垠网域: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
%>
|