加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读