4

この質問は、他の人から何らかの形で何度も尋ねられましたが、ほとんどが未回答のままであるか、与えられた回答は「C#を使用してください!」であり、これは偶然にも回答ではありません。;-)

VBA 経由で zip ファイルを Web サーバーにアップロードしたいと考えています。サーバー側のコードは既に存在し、うまく機能します。手動のフォーム アップロードで zip ファイルを受け取り、zip ファイルの内容を処理します。

理論的には、zip ファイルのバイナリ コンテンツを HTTP 要求文字列に変換し、WinHTTP ライブラリのいくつかのメソッドを使用してサーバーに送信する予定です。すべてがうまくいけば、サーバー サイド スクリプト (Perl) は、ファイルが VBA からのものかブラウザからのものかを判断できず、正常に動作し続けます。

ただし、zip ファイルを HTTP 要求文字列に変換することは、それほど簡単ではないようです。

オンラインで検索すると、3 つの一般的な戦略が存在することが示されているようです。

方法 1: WinHTTP および HTTP 要求文字列へのバイナリの手動エンコード

  • ファイルをバイナリ モードで開き、エンコーディング ブードゥーを手動で適用して、バイナリ ストリームを HTTP 要求文字列に変更し、WinHTTP を使用して途中で送信する必要があります。恐ろしい量のコード。

方法 2: WinHTTP

  • ADODB.Stream の使用を伴います。10 行未満のコード。

方法 3: SendKeys を介して IE を自動化する

  • このハックを説明する単語は 1 つだけです。そしておそらく、IE の将来のバージョンで壊れるでしょう。10 行未満のコード。セキュリティリスク。

私はMethod 2に傾倒していますが、ドキュメントは薄く、コード例はまれであり、それが機能するという確信はありません。ほとんどのコード例は不完全であり、多くの場合、機能しないというコメントが含まれています。この方法は実際に機能しますか?

方法 1は次の行です。

方法 3お願いします。(それに関しては、むしろC#を使用してください。C#が大好きです。要件だけでVBAしか許可されていません)

このタスクを達成する方法の良い例はありますか?

4

1 に答える 1

3

上記の(およびそれ以上の)すべての方法で恐ろしい量の実験を行った後、私はあなたの「方法1」に相当するものを使用しています-http://www.motobit.com/の項目(2)を使用していますtips/detpg_post-binary-data-url/ですが、次の割り当てがあります。

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

...そのコードで提案されているものの代わりに(コードは少し古いと思います)。ただし、これは完全ではありません。たとえば、私が持っていた古い Windows XP マシンではこれまで動作させることができませんでした (Win7 では問題なく動作します)。

于 2011-01-12T19:50:25.760 に答える