VB 发送文件(Http Post),带其他参数
发布时间:2020-12-17 07:55:50  所属栏目:百科  来源:网络整理 
            导读:除了发送文件主体外,还能带其他的参数。 Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long,ByVal dwFlags As Long,ByVal lpMultiByteStr As Long,ByVal cchMultiByte As Long,ByVal lpWideCharStr As Long,ByVal cchW
                
                
                
            | 除了发送文件主体外,还能带其他的参数。 Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long,ByVal dwFlags As Long,ByVal lpMultiByteStr As Long,ByVal cchMultiByte As Long,ByVal lpWideCharStr As Long,ByVal cchWideChar As Long) As Long
Private Const CP_UTF8 = 65001
'判断网页编码函数
Public Function IsUTF8(Bytes) As Boolean
Dim i As Long,AscN As Long,Length As Long
Length = UBound(Bytes) + 1
If Length < 3 Then
IsUTF8 = False
Exit Function
ElseIf Bytes(0) = &HEF And Bytes(1) = &HBB And Bytes(2) = &HBF Then
IsUTF8 = True
Exit Function
End If
Do While i <= Length - 1
If Bytes(i) < 128 Then
i = i + 1
AscN = AscN + 1
ElseIf (Bytes(i) And &HE0) = &HC0 And (Bytes(i + 1) And &HC0) = &H80 Then
i = i + 2
ElseIf i + 2 < Length Then
If (Bytes(i) And &HF0) = &HE0 And (Bytes(i + 1) And &HC0) = &H80 And (Bytes(i + 2) And &HC0) = &H80 Then
i = i + 3
Else
IsUTF8 = False
Exit Function
End If
Else
IsUTF8 = False
Exit Function
End If
Loop
If AscN = Length Then
IsUTF8 = False
Else
IsUTF8 = True
End If
End Function
Public Function Utf8ToUnicode(ByRef Utf() As Byte) As String
Dim lRet As Long
Dim lLength As Long
Dim lBufferSize As Long
lLength = UBound(Utf) - LBound(Utf) + 1
If lLength <= 0 Then Exit Function
lBufferSize = lLength * 2
Utf8ToUnicode = String$(lBufferSize,Chr(0))
lRet = MultiByteToWideChar(CP_UTF8,VarPtr(Utf(0)),lLength,StrPtr(Utf8ToUnicode),lBufferSize)
'MsgBox Utf8ToUnicode
'MsgBox lRet
If lRet <> 0 Then
Utf8ToUnicode = Left(Utf8ToUnicode,lRet)
Else
Utf8ToUnicode = ""
End If
End Function
'Test
Public Function GB2312ToUTF8(strIn As String,Optional ByVal ReturnValueType As VbVarType = vbString) As Variant
    Dim adoStream As Object
    Set adoStream = CreateObject("ADODB.Stream")
    adoStream.Charset = "utf-8"
    adoStream.Type = 2 'adTypeText
    adoStream.Open
    adoStream.WriteText strIn
    adoStream.Position = 0
    adoStream.Type = 1 'adTypeBinary
    GB2312ToUTF8 = adoStream.Read()
    adoStream.Close
    If ReturnValueType = vbString Then GB2312ToUTF8 = Mid(GB2312ToUTF8,1)
    
    
End Function
Private Function pvToByteArray(sText As String) As Byte()
  'pvToByteArray = StrConv(sText,vbFromUnicode)
   pvToByteArray = GB2312ToUTF8(sText)
   
End Function
 Private Sub pvPostFile(sUrl As String,sFileName As String,sPath As String,Optional ByVal bAsync As Boolean)
Const STR_BOUNDARY  As String = "3fbd04f5-b1ed-4060-99b9-fca7ff59c113"
Dim nFile           As Integer
Dim baBuffer()      As Byte
Dim sPostData       As String
'--- read file
nFile = FreeFile
Open sPath For Binary Access Read As nFile
If LOF(nFile) > 0 Then
    ReDim baBuffer(0 To LOF(nFile) - 1) As Byte
    Get nFile,baBuffer
  'sPostData = StrConv(baBuffer,vbUnicode)
    sPostData = Utf8ToUnicode(baBuffer)
    
End If
Close nFile
 Text1.Text = sPostData
    MsgBox sPostData
'--- prepare body
sPostData = "--" & STR_BOUNDARY & vbCrLf & _
    "Content-Type: application/octet-stream" & vbCrLf & _
    "Content-Disposition: form-data; filename=""" & Mid$(sFileName,InStrRev(sFileName,"") + 1) & """; name=""file""" & vbCrLf & vbCrLf & _
    sPostData & _
    "--" & STR_BOUNDARY & vbCrLf & _
    "Content-Type: text/plain" & vbCrLf & _
    "Content-Disposition: form-data; name=""dataFormat""" & vbCrLf & vbCrLf & _
    "hk" & vbCrLf & _
    "--" & STR_BOUNDARY & "--"
    
'--- post
With CreateObject("Microsoft.XMLHTTP")
    .Open "POST",sUrl,bAsync
    .SetRequestHeader "Content-Type","multipart/form-data; boundary=" & STR_BOUNDARY
    .Send pvToByteArray(sPostData)
  
End With
MsgBox "发送完毕"
End Sub
Private Sub Command1_Click()
Dim envstring As String
pvPostFile "http://localhost/fsly_service/api/hk/receiveXMLResult","dog.xml","C:VB XML工程dog.xml"
End Sub
Private Sub Command2_Click()
    Text1.Text = ""
End Sub
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
