如何使用VBA通过HTTP post上传zip文件?

4

这个问题以某种形式被其他人问过很多次,但大多数问题都没有得到答案或者给出的答案是“使用C#”,顺便说一句,这是一个无解的回答。 ;-)

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

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

然而,将zip文件转换为HTTP请求字符串似乎并不是非常直观。

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

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

  • 涉及以二进制模式打开文件,并手动应用一些编码技巧,将二进制流转换为HTTP请求字符串,并使用WinHTTP发送它。 需要大量的代码。

方法2:WinHTTP

  • 涉及使用ADODB.Stream。少于十行代码。

方法3:通过SendKeys自动化IE

  • 只有一个词可以形容这个黑客技巧:恶心!而且很可能在IE的将来版本中出现问题,如果没有已经出现了。少于十行代码。安全风险。

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

方法1是下一步。

方法3请不要使用!(如果必须使用,请使用C#。喜欢C#,但要求只允许使用VBA)

有人有关于如何完成此任务的好例子吗?


1
可能是如何使用VBA通过HTTP_POST发送Excel文件?的重复问题。 - 8128
1个回答

3

经过大量尝试,使用了上述方法(还有其他方法)后,我最终采用了类似于“方法1”的方式——使用http://www.motobit.com/tips/detpg_post-binary-data-url/中的第二项,但是进行了以下赋值:

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

我建议使用比代码中建议的更好的解决方案(我认为该代码有点老旧)。然而,它并不完美-例如,我迄今无法在我拥有的旧Windows XP机器上使其工作(在Win7上运行良好)。


@GeneQ,你能帮我用VBA上传文件吗? - user793468
@user793468,我正在赶着截止日期。再给我几天时间,我会发布代码的。 - GeneQ
4
几天已经过去了吗? - Nope
同意 - 很想知道你是如何实现这个的。 - Allan Bowe
已经等了5年了。 - Max Kleiner
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接