2016-03-31 5 views
1

Ich versuche, ein Bild auf eine REST-Webseite hochzuladen. Ich kann dies obwohl ein cURL-Aufruf erfolgreich tun:Hochladen eines Bildes in das Web mit Excel VBA

curl -u Admin:admin -T C:\temp\wikiTable.jpg http://192.168.0.35:8080/xwiki/rest/wikis/xwiki/spaces/Main/pages/WebHome/attachments/table.jpg 

ich jetzt versuche, dies obwohl ein HTTP Post in Excel VBA zu erreichen, aber einige Probleme auftreten. Ich mache zur Zeit diese:

Const STR_BOUNDARY As String = "---------------------------123456789abc" 
Dim nFile   As Integer 
Dim baBuffer()  As Byte 
Dim sPostData  As String 
Dim sFileName  As String 
Dim sUrl   As String 
sFileName = "C:\temp\wikiTable.jpg" 
sUrl = "http://192.168.0.35:8080/xwiki/rest/wikis/xwiki/spaces/Main/pages/WebHome/attachments/table.jpg"  
'--- 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 
'-- post 
Dim HTTPReq As Object 
Set HTTPReq = CreateObject("WinHttp.WinHttpRequest.5.1") 
HTTPReq.Option(4) = 13056 
HTTPReq.Open "Post", sUrl, False 
HTTPReq.SetCredentials "Admin", "admin", 0 
HTTPReq.setRequestHeader "Content-Type: multipart/form-data;" 
HTTPReq.send sPostData 
MsgBox (HTTPReq.responseText) 

Für die response ich folgende Fehlermeldung erhalte:

10.4.6 405 Method Not Allowed 

The method specified in the Request-Line is not allowed for the resource 
identified by the Request-URI. The response MUST include an Allow header 
containing a list of valid methods for the requested resource. 
https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.6 

Irgendwelche Ideen, was ich falsch hier?

+1

eine HTTP-Verkehr Erfassung der beiden Rennen und den Vergleich der beiden Anträge ist ein Weg der Untersuchung. –

Antwort

1

Folgende am Ende gearbeitet:

Private Function PostFile(sUrl As String, sFileName As String, strUserName As String, strPassword As String) As String 
    Dim nFile   As Integer 
    Dim baBuffer()  As Byte 
    Dim sPostData  As String 
'--- read file 
    Dim adoStream 
    Set adoStream = CreateObject("ADODB.Stream") 
    adoStream.Mode = 3   ' read write 
    adoStream.Type = 1   ' adTypeBinary 
    adoStream.Open 
    adoStream.LoadFromFile (sFileName) 
    adoStream.Position = 0 
'--- post 
    Dim HTTPReq As Object 
    Set HTTPReq = CreateObject("WinHttp.WinHttpRequest.5.1") 
    HTTPReq.Option(4) = 13056 
    HTTPReq.Open "PUT", sUrl, False 
    HTTPReq.setRequestHeader "Authorization", "Basic " + Base64Encode(strUserName + ":" + strPassword) 
    HTTPReq.setRequestHeader "Content-Type", "multipart/form-data" 
    HTTPReq.setRequestHeader "Content-Length", adoStream.Size 
    HTTPReq.send (adoStream.Read(adoStream.Size)) 
    pvPostFile = HTTPReq.responseText 
    Set adoStream = Nothing 
End Function 
0

Ich rate Ihnen, versuchen Sie, die Methode "POST" anstelle von "Post" aufrufen, weil es Groß-und Kleinschreibung kann.