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 Protocol を実行することは可能ですか?

編集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 に答える