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! :)
Jakie pliki: tekstowe lub binarne? –
Czy będziesz mógł wysyłać pliki jeden po drugim? Czy to nie jest opcja? – ikh
@TimWilliams binarne, pliki excel. – jonathanbell