2010-10-15 2 views
4

Этот вопрос задавался много раз другими людьми в той или иной форме, но большинство оставалось без ответа, или данный ответ «Использовать C#, duh!», Который, кстати, является не ответом. ;-)Как загрузить zip-файл через HTTP-сообщение с помощью VBA?

Я хочу загрузить zip-файл на веб-сервер через VBA. Код на стороне сервера уже существует и работает хорошо; он принимает файлы zip через загрузку формы вручную и делает что-то с содержимым zip-файла.

Теория состоит в том, что я планирую преобразовать двоичное содержимое zip-файла в строку запроса HTTP и отправить его на сервер, используя некоторые методы из библиотеки WinHTTP. Если все будет хорошо, сценарий на стороне сервера (в Perl) не сможет определить, поступал ли файл из VBA или браузера и продолжал нормально работать.

Однако трансформирование zip-файла в строку запроса HTTP не кажется очень простым.

Поиск в Интернете, кажется, указывает, существует 3 общих стратегий:

Метод 1: WinHTTP и ручное кодирование двоичного кода в строке запроса HTTP

  • Предполагает открытие файла в двоичном режиме и вручную применения некоторая кодировка voodoo, чтобы изменить двоичный поток в строку запроса HTTP и отправить его на своем пути с помощью WinHTTP. Страшный код.

Способ 2: WinHTTP

  • Вовлекает с использованием ADODB.Stream. Менее десяти строк кода.

Метод 3: Автоматизация IE с помощью SendKeys

  • Там только одно слово, чтобы описать этот хак: Тьфу! И, вероятно, сломается в будущей версии IE, если не будет. Менее десяти строк кода. Риск безопасности.

Я склоняюсь к Способ 2, однако, документация тонкие, примеры кода редко, и нет никакой уверенности в том, что она работает. Большинство примеров кода являются неполными и часто содержат комментарии, которые говорят, что они не работают. Действительно ли этот метод работает?

Способ 1 следующий в очереди.

Способ 3 Пожалуйста, нет! (Скорее используйте C#, если это так. Love C#, только требования разрешают только VBA)

У кого-нибудь есть хорошие примеры того, как выполнить эту задачу?

+1

Возможный дубликат [Как отправить файлы через HTTP \ _POST с помощью Excel с помощью VBA?] (Http://stackoverflow.com/questions/10954293/how-to-send-files-via-http-post-with- excel-using-vba) – 8128

ответ

3

После ужасного объема экспериментов со всеми вашими методами выше (и более) я использую то, что в значительной степени соответствует вашему «методу 1». Я использую элемент (2) из ​​http://www.motobit.com/tips/detpg_post-binary-data-url/, но со следующими присвоение:

Set http = CreateObject("WinHttp.WinHttprequest.5.1") 

... вместо предложенного в этом коде (код немного пожилой, я думаю). Это не идеально, хотя, например, я так далеко не смог заставить его работать на старой машине Windows XP, которую я имел (работает нормально на Win7).

+0

Я разработал решение, не успев опубликовать его. Будьте на связи. – GeneQ

+0

@GeneQ Не могли бы вы помочь мне с публикацией файла с помощью VBA? – user793468

+0

@ user793468 Я спешу, чтобы встретить крайний срок. Дайте пару дней, и я отправлю код. – GeneQ

Смежные вопросы