Вопрос, заданный здесь: How can I send an HTTP POST request to a server from Excel using VBA? - это почти то, что я искал, за исключением того, что я пытаюсь отправить на сервер несколько файлов. Я googled дальше и нашел How do I upload a zip file via HTTP post using VBA? Это было также хорошо, но довольно обескураживающе - кажется, что большая работа (не просто создание HTML-формы здесь ...).Как отправить файлы через HTTP_POST с помощью Excel с помощью VBA?
Вариант № 2 здесь: http://www.motobit.com/tips/detpg_post-binary-data-url/ (как цитируется в вопросе о SO, отмеченном выше), похоже, что он будет работать хорошо, но по мере того, как я работаю в JS и CSS, я понятия не имею, как создавать FormData (двоичные файлы для отправьте на сервер) в примере.
Может ли кто-нибудь мне помочь? В сущности, я хочу отправить 3-6 файлов через HTTP_POST через VBA изнутри Excel в PHP-скрипт на веб-сервере, который ожидает данные формы, такие как. HTML-форма для обработки этого будет выглядеть так:
<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>
Спасибо вам все заблаговременно.
EDIT - 2 августа 2012
Я все еще пытаюсь работать над этим вопросом. Я не знаю VBA/6, в значительной степени просто базовый JS, поэтому я немного потерялся. Вот то, что я сделал до сих пор:
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
Коробки сообщений в нижней части сценария сделать вывод заголовков и ответ (пустой HTML страницы) сервера. Я чувствую, что есть что-то, что я не задаю в заголовках, чтобы сделать сервер счастливым (обратите внимание: попытка комментирования Content-Type).
Если у кого-то есть опыт использования объекта WinHttpRequest в VBA/6 для POST бинарного файла по HTTP, пожалуйста, помогите! :)
Какие файлы: текстовые или двоичные? –
Можете ли вы отправить файлы по одному? Или это не вариант? – ikh
@TimWilliams бинарный, Excel файлы. – jonathanbell