<%
Class FileUploader
Public  File
Private Sub Class_Initialize()
    Set File = Server.CreateObject("Scripting.FileSystemObject")
End Sub
Private Sub Class_Terminate()
    set File=nothing
End Sub
Public Property Get Form(sIndex)
    Form = ""
End Property
Public Default Sub Upload()
    Dim biData, sInputName
    Dim nPosBegin, nPosEnd, nPos, vDataBounds, nDataBoundPos
    Dim nPosFile, nPosBound
    biData = Request.BinaryRead(Request.TotalBytes)
    nPosBegin = 1
    nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
    If (nPosEnd-nPosBegin) <= 0 Then Exit Sub
    vDataBounds = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
    nDataBoundPos = InstrB(1, biData, vDataBounds)
    Do Until nDataBoundPos = InstrB(biData, vDataBounds & CByteString("--"))
       nPos = InstrB(nDataBoundPos, biData, CByteString("Content-Disposition"))
       nPos = InstrB(nPos, biData, CByteString("name="))
       nPosBegin = nPos + 6
       nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
       sInputName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
       nPosFile = InstrB(nDataBoundPos, biData, CByteString("filename="))
       nPosBound = InstrB(nPosEnd, biData, vDataBounds)
       If nPosFile <> 0 And  nPosFile < nPosBound Then
           Dim oUploadFile, sFileName
           Set oUploadFile = New UploadedFile
           nPosBegin = nPosFile + 10
           nPosEnd =  InstrB(nPosBegin, biData, CByteString(Chr(34)))
           sFileName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
           oUploadFile.FileName = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))
           nPos = InstrB(nPosEnd, biData, CByteString("Content-Type:"))
           nPosBegin = nPos + 14
           nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))
           oUploadFile.ContentType = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
           nPosBegin = nPosEnd+4
           nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
           oUploadFile.FileData = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
           set File=oUploadFile
       Else
           nPos = InstrB(nPos, biData, CByteString(Chr(13)))
           nPosBegin = nPos + 4
           nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
       End If
       nDataBoundPos = InstrB(nDataBoundPos + LenB(vDataBounds), biData, vDataBounds)
    Loop
End Sub
Private Function CByteString(sString)
    Dim nIndex
    For nIndex = 1 to Len(sString)
        CByteString = CByteString & ChrB(AscB(Mid(sString,nIndex,1)))
    Next
End Function
Private Function CWideString(bsString)
    Dim nIndex
    CWideString =""
    For nIndex = 1 to LenB(bsString)
        CWideString = CWideString & Chr(AscB(MidB(bsString,nIndex,1))) 
    Next
End Function
End Class
Class UploadedFile
    Public ContentType
    Public FileName
    Public FileData
    Public Property Get FileSize()
    FileSize = LenB(FileData)
    End Property
    Public Sub SaveToDisk(sPath)
        Dim oFS, oFile
        Dim nIndex
        If sPath = "" Or FileName = "" Then Exit Sub
        If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\"
        Set oFS = Server.CreateObject("Scripting.FileSystemObject")
        If Not oFS.FolderExists(sPath) Then Exit Sub
        Set oFile = oFS.CreateTextFile(sPath & FileName, True)
        For nIndex = 1 to LenB(FileData)
            oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
        Next
        oFile.Close
    End Sub
End Class
%>