2012-06-08 15 views
5

Pytanie tutaj zadane: How can I send an HTTP POST request to a server from Excel using VBA? jest prawie dokładnie tym, czego szukałem, z tym wyjątkiem, że próbuję wysłać kilka plików na serwer. Wyszukałem go dalej i znalazłem How do I upload a zip file via HTTP post using VBA?. Było to również dobre, ale dość zniechęcające - wygląda na to, że wymaga to dużo pracy (nie tylko tworzenia tutaj formularza HTML ...).Jak wysłać pliki przez HTTP_POST z Excelem za pomocą VBA?

Opcja nr 2 tutaj: http://www.motobit.com/tips/detpg_post-binary-data-url/ (jak wspomniano w pytaniu dotyczącym SO zaznaczonym powyżej) wydaje się, że to by działało dobrze, ale jak pracuję w JS i CSS, nie mam pojęcia jak stworzyć FormData (pliki binarne do wysłać na serwer) w przykładzie.

Czy ktoś może mi pomóc? W istocie, chcę wysłać 3-6 plików przez HTTP_POST przez VBA z wnętrza Excela do skryptu PHP na serwerze sieciowym, który oczekuje danych takich jak. Formularz HTML do obsługi tego będzie wyglądać następująco:

<form action="upload_file.php" method="post" enctype="multipart/form-data"> 
    <input name="userfile[]" type="file" /><br /> 
    <input name="userfile[]" type="file" /><br /> 
    <input name="userfile[]" type="file" /><br /> 
    <input type="submit" /> 
</form> 

Dziękuję wszystkim z góry.

EDIT - 02 sierpień 2012

Wciąż próbuję pracować w tej kwestii. Nie znam VBA/6, właściwie tylko podstawowego JS, więc jestem trochę zagubiony. Oto co zrobiłem do tej pory:

Sub HTTPInternetPutFile() 

    ' create new object with WinHttpRequest for this operation 
    Dim WinHttpReq As Object 
    Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1") 
    Dim FormFields As String 

    ' initialize variables that we will set and pass as parameters 
    Dim sfpath 
    Dim strURL As String 
    Dim StrFileName As String 


     StrFileName = "CLIPrDL.csv" 
     sfpath = "C:\CLIPr\" 
     strURL = "http://s0106001c10187ab1.gv.shawcable.net/uploadtest/upload_file.php" 


     WinHttpReq.Open "POST", strURL, False 


     ' Set headers 
     WinHttpReq.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
     WinHttpReq.setRequestHeader "Accept-Charset", "ISO-8859-1,utf-8" 
     WinHttpReq.setRequestHeader "Content-Type", "multipart/form-data" 
     ' WinHttpReq.setRequestHeader "Content-Type", "text/html;charset=UTF8" 
     WinHttpReq.setRequestHeader "Content-Disposition", "form-data; name=""userfile[]""" 

     ' I dont understand this... why use fileup?? 
     FormFields = """filename=" & StrFileName & """" 
     FormFields = FormFields & "&" 
     FormFields = FormFields & sfpath 

     ' so comment it out for now 
     ' WinHttpReq.Send FormFields 
     WinHttpReq.Send sfpath & StrFileName 

     ' output this var to a message box becuase I dont know what it does really 
     MsgBox FormFields 
     ' Display the status code and response headers. 
     MsgBox WinHttpReq.GetAllResponseHeaders 
     MsgBox WinHttpReq.ResponseText 


End Sub 

Skrzynki wiadomość na dole skryptu zrobić wyjście nagłówki serwera i odpowiedź (pusta strona HTML). Czuję, że jest coś, czego nie umieszczam w nagłówkach, aby serwer był szczęśliwy (uwaga: próbuję skomentować Content-Type).

Jeśli ktoś ma doświadczenie w korzystaniu z obiektu WinHttpRequest w VBA/6 do POST pliku binarnego za pośrednictwem HTTP, proszę o pomoc! :)

+0

Jakie pliki: tekstowe lub binarne? –

+0

Czy będziesz mógł wysyłać pliki jeden po drugim? Czy to nie jest opcja? – ikh

+0

@TimWilliams binarne, pliki excel. – jonathanbell

Odpowiedz

Powiązane problemy