将嵌入式图像元素提交给经典的asp上传器

时间:2014-12-30 16:58:31

标签: html5 asp-classic

我希望以下html页面提交嵌入式图像,而不是使用提供的文件输入 <input type= file name="file1" name="file1">按照以下代码对asp上传者进行操作?!

<form name="Mine" id="Mine" enctype="multipart/form-data" action="upload1.asp" method="post">

将图像数据发布到下面的asp上传器(upload1.asp),它最初提交文件输入而不是嵌入图像

<%
option explicit
Response.Write "<BR>Execution ended: " & now

' used to track various positions
dim PosB, PosBBound, PosEBound, PosEHead, PosBFld, PosEFld

' these handle the data
dim Boundary, BBoundary, PartBHeader, PartAHeader, PartContent, PartContent2, Binary

' for writing and converting
dim fso, fle, rst, DataString, FileName

' various other
dim I, Length, ContType, PartName, LastPart, BCrlf, PartContentLength

' ado constants
const adLongVarBinary = 205
const adLongVarchar = 201

' must be submitted using POST
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then

    ContType = Request.ServerVariables("HTTP_Content_Type") 
    ' must be "multipart/form-data"
    If LCase(Left(ContType, 19)) = "multipart/form-data" Then 
        PosB = InStr(LCase(ContType), "boundary=") 'get boundary
        If PosB > 0 Then Boundary = Mid(ContType, PosB + 9) 'we have one

        'bugfix IE5.01 - double header
        PosB = InStr(LCase(ContType), "boundary=") 
        If PosB > 0 then
            PosB = InStr(Boundary, ",")
            If PosB > 0 Then Boundary = Left(Boundary, PosB - 1)
        end if

        Length = CLng(Request.ServerVariables("HTTP_Content_Length")) 'Get Content-Length header
    End If

    If Length > 0 And Boundary <> "" Then
        Boundary = "--" & Boundary

        ' get request, binary 
        Binary = Request.BinaryRead(Length)

        ' convert boundry to binary
        For I=1 to len(Boundary)
            BBoundary = BBoundary & ChrB(Asc(Mid(Boundary,I,1)))
        Next

        ' binary crlf
        BCrlf = ChrB(Asc(vbCr)) & ChrB(Asc(vbLf))

        ' get begin and end of first boundary
        PosBBound = InStrB(Binary, BBoundary)
        PosEBound = InStrB(PosBBound + LenB(BBoundary), Binary, BBoundary, 0)

        ' keep doing until we had them all
        Do While (PosBBound > 0 And PosEBound > 0)

            ' get position of the end of the header
            PosEHead = InStrB(PosBBound + LenB(BBoundary), Binary, BCrlf & BCrlf)

            ' get content of header and convert to string
            PartBHeader = MidB(Binary, PosBBound + LenB(BBoundary) + 2, PosEHead - PosBBound - LenB(BBoundary) - 2) 
            PartAHeader = ""
            For I=1 to lenb(PartBHeader)
                PartAHeader = PartAHeader & Chr(AscB(MidB(PartBHeader,I,1)))
            Next

            ' make sure we end it with ;
            If Right(PartAHeader,1) <> ";" Then PartAHeader = PartAHeader & ";"

            ' get content of this part
            PartContent = MidB(Binary, PosEHead + 4, PosEBound - (PosEHead + 4) - 2)

            ' get name of part
            PosBFld = Instr(lcase(PartAHeader),"name=")
            If PosBFld > 0 Then
                ' name found
                PosEFld = Instr(PosBFld,lcase(PartAHeader),";")
                If PosEFld > 0 Then
                    ' well-formed name header
                    PartName = Mid(PartAHeader,PosBFld+5,PosEFld-PosBFld-5)
                end if
                ' chop of leading and trailing "'s 
                Do Until Left(PartName,1) <> """" 
                    PartName = Mid(PartName,2)
                Loop
                Do Until Right(PartName,1) <> """" 
                    PartName = Left(PartName,Len(PartName)-1)
                Loop
            end if

            ' get file name of part (if any)
            PosBFld = Instr(lcase(PartAHeader),"filename=""")
            If PosBFld > 0 Then
                ' content header found
                PosEFld = Instr(PosBFld + 10,lcase(PartAHeader),"""")
                If PosEFld > 0 Then
                    ' well-formed content header
                    FileName = Mid(PartAHeader,PosBFld+10,PosEFld-PosBFld-10)
                end if
                ' chop of leading and trailing "'s
                Do Until Left(FileName,1) <> """" 
                    FileName = Mid(FileName,2)
                Loop
                Do Until Right(FileName,1) <> """" 
                    FileName = Left(FileName,Len(FileName)-1)
                Loop
            Else
                FileName = ""
            end if

            ' do conversion of binary to regular data
            ' at the end, datastring will contain 'readable' data
            ' is this wide-byte binary data?
            if vartype(PartContent) = 8 then 
                ' need to do some conversion
                Set rst = CreateObject("ADODB.Recordset")
                PartContentLength = LenB(PartContent)
                if PartContentLength > 0 then
                    ' data, so add to recordset to speed up conversion
                    rst.Fields.Append "data", adLongVarBinary, PartContentLength
                    rst.Open
                    rst.AddNew
                    rst("data").AppendChunk PartContent & ChrB(0)
                    rst.Update
                    PartContent2 = rst("data").GetChunk(PartContentLength)
                    rst.close
                    set rst = nothing
                else
                    ' no data?
                    PartContent2 = ChrB(0)
                End If
            else 
                ' no need for conversion
                PartContent2 = PartContent
            end if

            PartContentLength = LenB(PartContent2)
            if PartContentLength > 0 then
                ' we have data to convert
                Set rst = CreateObject("ADODB.Recordset")
                rst.Fields.Append "data", adLongVarChar, PartContentLength
                rst.Open
                rst.AddNew
                rst("data").AppendChunk PartContent2 
                rst.Update
                DataString = rst("data")
                rst.close
                set rst = nothing
            Else
                ' nothing to convert
                dataString = ""
            End If

            ' conversion has been done, now what to do with it

            If FileName <> "" Then
                ' we have a file, let's save it to disk

                FileName = Mid(Filename,InstrRev(FileName,"\")+1)

                ' open a file (textstream)
                set fso = Server.CreateObject("Scripting.Filesystemobject")
                set fle = fso.CreateTextFile(server.MapPath(FileName))
                ' write the data
                fle.write DataString
                fle.close
                ' cleanup
                set fle = nothing
                set fso = nothing

                ' give notification
                Response.Write "<BR>Uploaded file " & Partname & " - " & FileName & "(" & Len(Datastring) & " bytes)"
            else
                ' some other type of field, let's just output this
                Response.Write "<BR>Form field: " & Partname & " - " & Datastring
            End If

            LastPart = MidB(Binary, PosEBound + LenB(BBoundary), 2)

            If LastPart = ChrB(Asc("-")) & ChrB(Asc("-")) Then 
                ' don't look for others
                PosBBound = 0
                PosEBound = 0
            else
                ' look for others
                PosBBound = PosEBound
                PosEBound = InStrB(PosBBound + LenB(BBoundary), Binary, BBoundary)
            End If

        loop

        Response.Write "<P>End of form input, all fields processed"

    else

        Response.Write "<P>Invalid or empty request, no fields processed. Make sure that the content type is multipart/form-data"

    end if

else

    Response.Write "<P>Form must be submitted using the POST method"

end if

Response.Write "<BR>Execution ended: " & now

%>

0 个答案:

没有答案