• <strike id="ygw0y"></strike>
    <strike id="ygw0y"><s id="ygw0y"></s></strike>
  • 您現在的位置: 中國農業人才網 >> 職場資訊 >> 黑板報 >> 正文

    在ASP中模擬form上傳文件(以multipart/form-data編碼)

    2012-3-31 本站原創
    <%
    Public Const adTypeBinary = 1
    Public Const adTypeText = 2
    Public Const adLongVarBinary = 205
    
    '字節數組轉指定字符集的字符串
    Public Function BytesToString(vtData, ByVal strCharset)
        Dim objFile
        Set objFile = Server.CreateObject("ADODB.Stream")
        objFile.Type = adTypeBinary
        objFile.Open
        If VarType(vtData) = vbString Then
            objFile.Write BinaryToBytes(vtData)
        Else
            objFile.Write vtData
        End If
        objFile.Position = 0
        objFile.Type = adTypeText
        objFile.Charset = strCharset
        BytesToString = objFile.ReadText(-1)
        objFile.Close
        Set objFile = Nothing
    End Function
    
    '字節字符串轉字節數組,即經過MidB/LeftB/RightB/ChrB等處理過的字符串
    Public Function BinaryToBytes(vtData)
        Dim rs
        Dim lSize
        lSize = LenB(vtData)
        Set rs = Server.CreateObject("ADODB.RecordSet")
        rs.Fields.Append "Content", adLongVarBinary, lSize
        rs.Open
        rs.AddNew
        rs("Content").AppendChunk vtData
        rs.Update
        BinaryToBytes = rs("Content").GetChunk(lSize)
        rs.Close
        Set rs = Nothing
    End Function
    
    '指定字符集的字符串轉字節數組
    Public Function StringToBytes(ByVal strData, ByVal strCharset)
        Dim objFile
        Set objFile = Server.CreateObject("ADODB.Stream")
        objFile.Type = adTypeText
        objFile.Charset = strCharset
        objFile.Open
        objFile.WriteText strData
        objFile.Position = 0
        objFile.Type = adTypeBinary
        If UCase(strCharset) = "UNICODE" Then
            objFile.Position = 2 'delete UNICODE BOM
        ElseIf UCase(strCharset) = "UTF-8" Then
            objFile.Position = 3 'delete UTF-8 BOM
        End If
        StringToBytes = objFile.Read(-1)
        objFile.Close
        Set objFile = Nothing
    End Function
    
    '獲取文件內容的字節數組
    Public Function GetFileBinary(ByVal strPath)
        Dim objFile
        Set objFile = Server.CreateObject("ADODB.Stream")
        objFile.Type = adTypeBinary
        objFile.Open
        objFile.LoadFromFile strPath
        GetFileBinary = objFile.Read(-1)
        objFile.Close
        Set objFile = Nothing
    End Function
    
    'XML Upload Class
    Class XMLUploadImpl
    Private xmlHttp
    Private objTemp
    Private strCharset, strBoundary
    
    Private Sub Class_Initialize()
        Set xmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
        Set objTemp = Server.CreateObject("ADODB.Stream")
        objTemp.Type = adTypeBinary
        objTemp.Open
        strCharset = "GBK"
        strBoundary = GetBoundary()
    End Sub
    
    Private Sub Class_Terminate()
        objTemp.Close
        Set objTemp = Nothing
        Set xmlHttp = Nothing
    End Sub
    
    '獲取自定義的表單數據分界線
    Private Function GetBoundary()
        Dim ret(24)
        Dim table
        Dim i
        table = "ABCDEFGHIJKLMNOPQRSTUVWXZYabcdefghijklmnopqrstuvwxzy0123456789"
        Randomize
        For i = 0 To UBound(ret)
            ret(i) = Mid(table, Int(Rnd() * Len(table) + 1), 1)
        Next
        GetBoundary = "__NextPart__ " & Join(ret, Empty)
    End Function 
    
    '設置上傳使用的字符集
    Public Property Let Charset(ByVal strValue)
        strCharset = strValue
    End Property
    
    '添加文本域的名稱和值
    Public Sub AddForm(ByVal strName, ByVal strValue)
        Dim tmp
        tmp = "\r\n--$1\r\nContent-Disposition: form-data; name=""$2""\r\n\r\n$3"
        tmp = Replace(tmp, "\r\n", vbCrLf)
        tmp = Replace(tmp, "$1", strBoundary)
        tmp = Replace(tmp, "$2", strName)
        tmp = Replace(tmp, "$3", strValue)
        objTemp.Write StringToBytes(tmp, strCharset)
    End Sub
    
    '設置文件域的名稱/文件名稱/文件MIME類型/文件路徑或文件字節數組
    Public Sub AddFile(ByVal strName, ByVal strFileName, ByVal strFileType, vtValue)
        Dim tmp
        tmp = "\r\n--$1\r\nContent-Disposition: form-data; name=""$2""; filename=""$3""\r\nContent-Type: $4\r\n\r\n"
        tmp = Replace(tmp, "\r\n", vbCrLf)
        tmp = Replace(tmp, "$1", strBoundary)
        tmp = Replace(tmp, "$2", strName)
        tmp = Replace(tmp, "$3", strFileName)
        tmp = Replace(tmp, "$4", strFileType)
        objTemp.Write StringToBytes(tmp, strCharset)
        If VarType(vtValue) = (vbByte Or vbArray) Then
            objTemp.Write vtValue
        Else
            objTemp.Write GetFileBinary(vtValue)
        End If
    End Sub
    
    '設置multipart/form-data結束標記
    Private Sub AddEnd()
        Dim tmp
        'tmp = Replace("\r\n--$1--\r\n", "$1", strBoundary)
            tmp = "\r\n--$1--\r\n" 
            tmp = Replace(tmp, "\r\n", vbCrLf) 
            tmp = Replace(tmp, "$1", strBoundary)
        objTemp.Write StringToBytes(tmp, strCharset)
        objTemp.Position = 2
    End Sub
    
    '上傳到指定的URL,并返回服務器應答
    Public Function Upload(ByVal strURL)
        Call AddEnd
        xmlHttp.Open "POST", strURL, False
        xmlHttp.setRequestHeader "Content-Type", "multipart/form-data"
        xmlHttp.setRequestHeader "Content-Length", objTemp.size
        xmlHttp.Send objTemp
            If VarType(xmlHttp.responseBody) = (vbByte Or vbArray) Then 
                Upload = BytesToString(xmlHttp.responseBody, strCharset) 
            End If
    End Function
    End Class
    %>
    在包含該文件后用以下代碼調用
    VB code
    Dim UploadData
    Set UploadData = New XMLUploadImpl
    UploadData.Charset = "gb2312"
    UploadData.AddForm "Test", "123456" '文本域的名稱和內容
    UploadData.AddFile "ImgFile", "F:\test.jpg", "image/jpg", GetFileBinary("F:\test.jpg")'圖片或者其它文件
    Response.Write UploadData.Upload("http://localhost/receive.asp") 'receive.asp為接收頁面
    Set UploadData = Nothing
    



    本文地址:http://www.qingqingav.com/news/n08/201203/6925.html,如要轉載,請注明轉載自中國農業人才網
    文章錄入:希望的田野    責任編輯:耕農 
    【字體: 】【打印此文】【關閉窗口
    相關文章
      沒有相關文章
    中國農業人才網及旗下網站 版權所有 2003- © | 關于我們 | 聯系我們 | 服務條款 | 服務價格 | 付款方式 | 幫助中心 | 網站地圖

    中國農業人才網及旗下網站為您提供畜牧人才種植人才農資人才食品人才等求職招聘服務

    主站蜘蛛池模板: 人妻AV中出无码内射| 在线观看无码不卡AV| 成在人线av无码免费高潮喷水| 无码国产精品一区二区免费式直播 | 国产精品无码久久久久久| 无码中文字幕色专区| 国产精品亚韩精品无码a在线| 亚洲AV无码专区亚洲AV桃| 久久人午夜亚洲精品无码区| 免费无码又黄又爽又刺激| 九九久久精品无码专区| 亚洲午夜无码片在线观看影院猛| 亚洲精品无码专区在线| 精品久久久无码中文字幕边打电话| 18禁网站免费无遮挡无码中文| 精品无码国产自产拍在线观看| 亚洲日韩精品无码AV海量| 精品一区二区三区无码免费视频| 毛片无码免费无码播放| 无码福利写真片视频在线播放| 人妻少妇看A偷人无码精品| 无码av不卡一区二区三区| 精品成在人线AV无码免费看| 精品欧洲av无码一区二区三区| 精品久久久久久久无码久中文字幕| 最新亚洲人成无码网www电影| 日韩人妻无码一区二区三区99 | 人妻在线无码一区二区三区| 久久人妻无码中文字幕| 亚洲国产成人精品无码区花野真一| 无码一区二区三区亚洲人妻| 日韩精品人妻系列无码专区| 亚洲国产精品无码久久久蜜芽| 无码国产69精品久久久久孕妇| 亚洲av无码久久忘忧草| 欧洲人妻丰满av无码久久不卡| 天堂无码久久综合东京热 | 国产精品va无码免费麻豆| 久久亚洲精品成人av无码网站| 久久精品日韩av无码| 精品久久久久久久无码|