4

其他人以某种形式多次问过这个问题,但大多数仍未得到回答,或者给出的答案是“使用 C#,呃!”,顺便说一句,这是一个非答案。;-)

我想通过 VBA 将 zip 文件上传到 Web 服务器。服务器端代码已经存在并且运行良好;它通过手动表单上传接受 zip 文件,并对 zip 文件的内容进行处理。

理论上,我计划将 zip 文件的二进制内容转换为 HTTP 请求字符串,并使用 WinHTTP 库中的一些方法将其发送到服务器。如果一切顺利,服务器端脚本(在 Perl 中)应该无法判断文件是来自 VBA 还是来自浏览器并继续正常工作。

但是,将 zip 文件转换为 HTTP 请求字符串似乎不是很简单。

在线搜索似乎表明存在 3 种常见策略:

方法一:WinHTTP和手动编码二进制到HTTP请求字符串

  • 涉及以二进制模式打开文件并手动应用一些编码 voodoo 将二进制流更改为 HTTP 请求字符串并使用 WinHTTP 将其发送。可怕的代码量。

方法二:WinHTTP

  • 涉及使用 ADODB.Stream。不到十行代码。

方法 3:通过 SendKeys 自动化 IE

  • 只能用一个词来形容这个 hack:Yuck!并且可能会在未来版本的 IE 中中断,如果还没有的话。不到十行代码。安全风险。

我倾向于Method 2,但是,文档很薄,代码示例很少,并且不确定它是否有效。大多数代码示例都不完整,并且经常有注释说它们不起作用。这种方法真的有效吗?

方法1是下一个。

方法3请不要!(如果涉及到,宁愿使用 C#。喜欢 C#,只是要求只允许 VBA)

任何人都有关于如何完成这项任务的好例子?

4

1 回答 1

3

在对上述所有方法(以及更多方法)进行了大量实验之后,我正在使用几乎相当于您的“方法 1”的东西 - 我正在使用来自http://www.motobit.com/的项目 (2)提示/detpg_post-binary-data-url/,但具有以下分配:

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

...而不是该代码中建议的那个(我认为该代码有点老了)。不过,它并不完美——例如,到目前为止,我一直无法让它在我拥有的旧 Windows XP 机器上运行(在 Win7 上运行正常)。

于 2011-01-12T19:50:25.760 回答