|
复制代码 代码如下: <% '================================================ ' 函数名:SaveRemoteFile ' 作 用:保存远程文件到本地 ' 参 数:strFileName ----保存文件的名称 ' strRemoteUrl ----远程文件URL ' 返回值:布尔值 True/False '================================================ Function SaveRemoteFile(ByVal strFileName, ByVal strRemoteUrl) Dim oStream, Retrieval, GetRemoteData
SaveRemoteFile = False On Error Resume Next Set Retrieval = Server.CreateObject("Microsoft.XMLHTTP") Retrieval.Open "GET", strRemoteUrl, False, "", "" Retrieval.Send If Retrieval.readyState <> 4 Then Exit Function If Retrieval.Status > 300 Then Exit Function GetRemoteData = Retrieval.ResponseBody Set Retrieval = Nothing
If LenB(GetRemoteData) > 100 Then Set oStream = Server.CreateObject("Adodb.Stream") oStream.Type = 1 oStream.Mode = 3 oStream.Open oStream.Write GetRemoteData oStream.SaveToFile Server.MapPath(strFileName), 2 oStream.Cancel oStream.Close Set oStream = Nothing Else Exit Function End If
If Err.Number = 0 Then SaveRemoteFile = True Else Err.Clear End If End Function %>
复制代码 代码如下: <% Class Download_Cls Private sUploadDir Private nAllowSize Private sAllowExt Private sOriginalFileName Private sSaveFileName Private sPathFileName
Public Property Get RemoteFileName() RemoteFileName = sOriginalFileName End Property
Public Property Get LocalFileName() LocalFileName = sSaveFileName End Property
Public Property Get LocalFilePath() LocalFilePath = sPathFileName End Property
Public Property Let RemoteDir(ByVal strDir) sUploadDir = strDir End Property
Public Property Let AllowMaxSize(ByVal intSize) nAllowSize = intSize End Property
Public Property Let AllowExtName(ByVal strExt) sAllowExt = strExt End Property
Private Sub Class_Initialize() On Error Resume Next Script_Object = "Scripting.FileSystemObject" sUploadDir = "UploadFile/" nAllowSize = 500 sAllowExt = "gif|jpg|png|bmp" End Sub
Public Function ChangeRemote(sHTML) On Error Resume Next Dim s_Content s_Content = sHTML On Error Resume Next Dim re, s, RemoteFileUrl, SaveFileName, SaveFileType Set re = New RegExp re.IgnoreCase = True re.Global = True re.Pattern = "((http|https|ftp|rtsp|mms):(\/\/|\\\\){1}(([A-Za-z0-9_-])+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(\S*\/)((\S)+[.]{1}(" & sAllowExt & ")))" Set s = re.Execute(s_Content) Dim a_RemoteUrl(), n, i, bRepeat n = 0 ' 转入无重复数据 For Each RemoteFileUrl In s If n = 0 Then n = n + 1 ReDim a_RemoteUrl(n) a_RemoteUrl(n) = RemoteFileUrl Else bRepeat = False For i = 1 To UBound(a_RemoteUrl) If UCase(RemoteFileUrl) = UCase(a_RemoteUrl(i)) Then bRepeat = True Exit For End If Next If bRepeat = False Then n = n + 1 ReDim Preserve a_RemoteUrl(n) a_RemoteUrl(n) = RemoteFileUrl End If End If Next ' 开始替换操作 Dim nFileNum, sContentPath,strFilePath sContentPath = RelativePath2RootPath(sUploadDir) nFileNum = 0 For i = 1 To n SaveFileType = Mid(a_RemoteUrl(i), InStrRev(a_RemoteUrl(i), ".") + 1) SaveFileName = GetRndFileName(SaveFileType) strFilePath = sUploadDir & SaveFileName If SaveRemoteFile(strFilePath, a_RemoteUrl(i)) = True Then nFileNum = nFileNum + 1 If nFileNum > 0 Then sOriginalFileName = sOriginalFileName & "|" sSaveFileName = sSaveFileName & "|" sPathFileName = sPathFileName & "|" End If sOriginalFileName = sOriginalFileName & Mid(a_RemoteUrl(i), InStrRev(a_RemoteUrl(i), "/") + 1) sSaveFileName = sSaveFileName & SaveFileName sPathFileName = sPathFileName & sContentPath & SaveFileName s_Content = Replace(s_Content, a_RemoteUrl(i), sContentPath & SaveFileName, 1, -1, 1) End If Next
ChangeRemote = s_Content End Function
Public Function RelativePath2RootPath(url) '这个主要是实现../转换为实际路径 Dim sTempUrl sTempUrl = url If Left(sTempUrl, 1) = "/" Then RelativePath2RootPath = sTempUrl Exit Function End If
Dim sWebEditorPath sWebEditorPath = Request.ServerVariables("SCRIPT_NAME") sWebEditorPath = Left(sWebEditorPath, InStrRev(sWebEditorPath, "/") - 1) Do While Left(sTempUrl, 3) = "../" sTempUrl = Mid(sTempUrl, 4) sWebEditorPath = Left(sWebEditorPath, InStrRev(sWebEditorPath, "/") - 1) Loop RelativePath2RootPath = sWebEditorPath & "/" & sTempUrl End Function
Public Function GetRndFileName(sExt) Dim sRnd Randomize sRnd = Int(900 * Rnd) + 100 GetRndFileName = Year(Now) & Month(Now) & Day(Now) & Hour(Now) & Minute(Now) & Second(Now) & sRnd & "." & sExt End Function End Class %> |
|