SoFunction
Updated on 2025-04-12

Download the class in newap


<%
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 = ""
        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
         = True
         = True
         = "((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 = (s_Content)
        Dim a_RemoteUrl(), n, i, bRepeat
        n = 0
'Transfer to no duplicate data
        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
'Start the replacement operation
        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)
'This is mainly to implement.../convert to actual path
        Dim sTempUrl
        sTempUrl = url
        If Left(sTempUrl, 1) = "/" Then
            RelativePath2RootPath = sTempUrl
            Exit Function
        End If

        Dim sWebEditorPath
        sWebEditorPath = ("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
%>