1

我在 Visual Basic .net 中有这段代码,我想在 Visual Basic 6 中做同样的事情。代码将图像上传到给定的 URL。我必须使用 Rest 协议,因为我上传图像的服务器请求它。

 Dim res As New RestSharp.RestRequest("URL_OF_SERVER", RestSharp.Method.POST)

 res.AddFile("file", "File_location_on_PC")
 Dim restClient As New RestSharp.RestClient()

 Dim r As New RestSharp.RestResponse
 r = restClient.Execute(res)

是否可以在 Visual Basic 6 中执行相同的 Rest 协议?

编辑 1:我已经尝试过了,但发生了错误

Dim xmlhttp As MSXML2.XMLHTTP30
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 NombreArchivo 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)
End If
Close nFile
'--- prepare body
sPostData = "--" & STR_BOUNDARY & vbCrLf & _
"   Content-Disposition: form-data; name=""image002""; filename=""C:\image002.jpg" & _
"--" & STR_BOUNDARY & "--"
'--- post
Set xmlhttp = New MSXML2.XMLHTTP30
With xmlhttp
    .Open "POST", Url, False
    .setRequestHeader "Content-Type", "multipart/form-data; boundary=" & STR_BOUNDARY
    .send pvToByteArray(sPostData)
End With

Private Function pvToByteArray(sText As String) As Byte()
   pvToByteArray = StrConv(sText, vbFromUnicode)
End Function

错误 :

responseText
{"message":"file.not_found","error":"There is no file in request.","status":400,"cause":[]}

谢谢!

4

2 回答 2

3

如果您只需要发布文件,这是一个简单的功能

Private Sub pvPostFile(sUrl As String, sFileName 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 sFileName 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)
    End If
    Close nFile
    '--- prepare body
    sPostData = "--" & STR_BOUNDARY & vbCrLf & _
        "Content-Disposition: form-data; name=""uploadfile""; filename=""" & Mid$(sFileName, InStrRev(sFileName, "\") + 1) & """" & vbCrLf & _
        "Content-Type: application/octet-stream" & vbCrLf & vbCrLf & _
        sPostData & 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
End Sub

Private Function pvToByteArray(sText As String) As Byte()
    pvToByteArray = StrConv(sText, vbFromUnicode)
End Function

如果您的文件足够大并且在 30 秒内超时,您可以切换到MSXML2.ServerXMLHTTP能够使用它的方法。SetTimeouts

于 2012-08-30T07:45:40.917 回答
1

您可以为 RestSharp 程序集创建一个 COM 可调用包装器 (CCW) - 有关如何执行此操作的详细信息,请参阅此 URL:

http://msdn.microsoft.com/en-us/library/ms973802.aspx

注册后,您可以使用 VB6 中的 RestSharp。

于 2012-08-29T23:58:29.587 回答