2016-03-31 7 views
1

画像をRESTウェブページにアップロードしようとしています。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 

私は今、ExcelのVBAでHTTPポストかかわらず、これを達成しようとしているが、いくつかの問題を経験している:私は、cURLを呼び出しても正常にこの操作を行うことができます。

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 

すべてのアイデアは、私がここで間違ってやっている:私は次のエラーを得続けるresponseTextについて

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) 

:私は現在、これをやっていますか?

+1

は、2のHTTPトラフィックのキャプチャを実行すると、2つの要求を比較したが、調査の一つの道です。 –

答えて

1

次エンドで働いていた:

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

"Post"の代わりに"POST"メソッドを呼び出すことをお勧めします。大文字と小文字が区別される可能性があるためです。

関連する問題