远程贴图功能的实现
首发于BBSXP官方论坛,现在摘回来
远程贴图功能的实现
此源码非绝对原创,但其中代码是根据ASP文章管理系统中的部分代码组合后自己修改而成,应属原创
转帖请注明原作者
很简单就可以实现了
<%
'==================================================
'制作人:NETTON.CN
'过程名:ReplaceRemoteUrl
'作 用:替换字符串中的远程文件为本地文件并保存远程文件
'参 数:strContent ------ 要替换的字符串
'==================================================
function ReplaceRemoteUrl(strContent)
if IsObjInstalled("Microsoft.XMLHTTP")=False or EnableSaveRemote="No" then
ReplaceRemoteUrl=strContent
exit function
end if
dim re,RemoteFile,RemoteFileurl,SaveFilePath,SaveFileName,SaveFileType,arrSaveFileName,ranNum
SaveFilePath = "UpFile/img" '文件保存的本地路径
if right(SaveFilePath,1)<>"/" then SaveFilePath=SaveFilePath&"/"
Set re=new RegExp
re.IgnoreCase =true
re.Global=True
re.Pattern = "((http|https|ftp|rtsp|mms):(\/\/|\\\\){1}((\w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(\S*\/)((\S)+[.]{1}(gif|jpg|png|bmp)))"
Set RemoteFile = re.Execute(strContent)
For Each RemoteFileurl in RemoteFile
arrSaveFileName = split(RemoteFileurl,".")
SaveFileType=arrSaveFileName(ubound(arrSaveFileName))
ranNum=int(900*rnd)+100
Set fso = Server.CreateObject("Scripting.FileSystemObject")
strDir="UpFile/img/"&year(now)&"-"&month(now)&""
if not fso.folderexists(Server.MapPath(strDir)) then fso.CreateFolder(Server.MapPath(strDir))
strDir=strDir&"/"
SaveFileName = strDir&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&SaveFileType
call SaveRemoteFile(SaveFileName,RemoteFileurl)
strContent=Replace(strContent,RemoteFileurl,SaveFileName)
if UploadFiles="" then
UploadFiles=SaveFileName
else
UploadFiles=UploadFiles & "|" & SaveFileName
end if
Next
ReplaceRemoteUrl=strContent
end function
'==================================================
'过程名:SaveRemoteFile
'作 用:保存远程的文件到本地
'参 数:LocalFileName ------ 本地文件名
' RemoteFileUrl ------ 远程文件URL
'==================================================
sub SaveRemoteFile(LocalFileName,RemoteFileUrl)
dim Ads,Retrieval,GetRemoteData
Set Retrieval = Server.CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", RemoteFileUrl, False, "", ""
.Send
GetRemoteData = .ResponseBody
End With
Set Retrieval = Nothing
Set Ads = Server.CreateObject("Adodb.Stream")
With Ads
.Type = 1
.Open
.Write GetRemoteData
.SaveToFile server.MapPath(LocalFileName),2
.Cancel()
.Close()
End With
Set Ads=nothing
end sub
%>
结合本人图像防盗链功能http://bbs.yuzi.net/ShowPost.asp?ThreadID=641947
http://www.netton.cn/bbs/ShowPost.asp?ThreadID=2423
这才不至于你的服务器流量过大.
明白的就用,看不懂的话别改,改了麻烦也不少.