関連する記事 ファイルのアップロード時のデータのダンプ 仕様を確認したわけではありませんが、boundary は、境界識別する為のユニークな文字列であると思われます。http ヘッダで指定した文字列を x とすると --x が境界で、改行コードが付加されます。一番最後の境界は --x-- です。upload_target.php ※ upload_target.php と同じ場所にアップロードされたファイルを作成します。
<!DOCTYPE html> <html> <head> <title>単純ファイルアップロード</title> <meta charset="UTF-8"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.1/css/bootstrap.css"> <style> #content,#result { padding: 20px; } #result { white-space: pre; } </style> </head> <body> <div id="content"> <form enctype="multipart/form-data" method="POST"> <p> <input name="target" type="file" class="ml-4 btn btn-outline-primary"> <a class="ml-4 btn btn-info btn-sm" href="<?= $_SERVER["PHP_SELF"] ?>">GET 再読み込み</a> </p> <p> <input type="submit" name="send" value="アップロード" class="ml-4 btn btn-outline-primary"> </p> </form> </div> <div id="result"> <?php if ( $_SERVER['REQUEST_METHOD'] == "POST" ) { $upload = realpath("./"); $upload .= ( DIRECTORY_SEPARATOR . $_FILES['target']['name'] ); print "$upload\n"; if ( move_uploaded_file($_FILES['target']['tmp_name'], $upload ) ) { print "<p>アップロードに成功しました</p>\n"; } print_r( $_FILES ); } ?> </div> </body> </html>
upload.wsf アップロード先の情報と、アップロードするファイルの情報を『アップロード用 URL』セクションで書き換えて下さい。 テキストストリームに shift_jis をセットしていますが、この場合 VBScript 側も PHP 側も日本語のインターフェイスを使用していないので問題ありません。( テキストを UTF-8 で送りたい場合は同様の方法で shift_jis を UTF-8 に変換する方法はありますが、PHP 側で変換するほうが簡単でしょう )
<JOB> <COMMENT> ************************************************************ URLEncode用 ************************************************************ </COMMENT> <OBJECT id="Stream" progid="ADODB.Stream" /> <OBJECT id="StreamWorkBin" progid="ADODB.Stream" /> <OBJECT id="StreamBin" progid="ADODB.Stream" /> <COMMENT> ************************************************************ HTTP通信用 ************************************************************ </COMMENT> <OBJECT id="objHTTP" progid="Msxml2.ServerXMLHTTP" /> <SCRIPT language=VBScript> ' ********************************************************** ' アップロード用 URL ' ********************************************************** upload_url = "http://localhost/test/001/upload_target.php" upload_file = "winofsql.png" upload_type = "image/png" ' ********************************************************* ' 送信準備 ' ********************************************************* Call objHTTP.Open( "POST",upload_url, False ) ' File Upload 用 HTTP ヘッダ strBoundary = DateDiff("s", "1970/1/1 0:00:00",DateAdd("h",-9,now)) Call objHTTP.setRequestHeader("Content-Type", "multipart/form-data; boundary="&strBoundary) ' バイナリ変換用ストリーム StreamWorkBin.Open StreamWorkBin.Type = 1 ' 最終バイナリストリーム StreamBin.Open StreamBin.Type = 1 ' テキストストリーム Stream.Open Stream.Charset = "shift_jis" ' 開始セクション Stream.WriteText "--" & strBoundary & vbLf Stream.WriteText "Content-Disposition: form-data; name=""target""; filename=""uploadtest.png""" & vbLf Stream.WriteText "Content-Type: "&upload_type& vbLf Stream.WriteText vbLf Stream.Position = 0 ' テキストをバイナリに変換 Stream.CopyTo StreamWorkBin ' 第一セクションを書き込み StreamWorkBin.Position = 0 StreamBin.Write StreamWorkBin.Read(StreamWorkBin.Size) ' 画像を読み込む StreamWorkBin.LoadFromFile(upload_file) ' 画像を書き込み StreamBin.Write StreamWorkBin.Read(StreamWorkBin.Size) ' バイナリワークをいったん閉じる StreamWorkBin.Close StreamWorkBin.Open StreamWorkBin.Type = 1 ' テキストをいったん閉じる Stream.Close Stream.Open Stream.Charset = "shift_jis" ' 終了セクション Stream.WriteText vbLf & "--" & strBoundary & "--" & vbLf Stream.Position = 0 ' テキストをバイナリに変換 Stream.CopyTo StreamWorkBin ' 終了セクションを書き込み StreamWorkBin.Position = 0 StreamBin.Write StreamWorkBin.Read(StreamWorkBin.Size) ' 送信データを取得 nLen = StreamBin.Size StreamBin.Position = 0 strData = StreamBin.Read(nLen) Call StreamBin.SaveToFile( "result.dat", 2 ) ' ********************************************************* ' 投稿データとその長さ ' ********************************************************* Call objHTTP.SetRequestHeader("Content-Length",nLen) ' ********************************************************* ' API へ向けて送信 ' ********************************************************* Dim lResolve : lResolve = 60 * 1000 Dim lConnect : lConnect = 60 * 1000 Dim lSend : lSend = 60 * 1000 Dim lReceive : lReceive = 60 * 1000 Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive) Call objHTTP.Send(strData) Wscript.Echo(objHTTP.responseText) </SCRIPT> </JOB>
result.dat には、アップロードする為にサーバに転送したデータ部分がそのまま保存されます。
VBScriptドキュメント
タグ:Curl
|
【VBS + インターネットの最新記事】
- VBScript / JScript: Windows標準のオブジェクト( CDO.Message ) と ロリポップメールを使ってメール送信
- VBScriptの関数定義をWEB上に置いて、Msxml2.ServerXMLHTTP で読みだして PCで使用する
- VBScript : Seesaa ブログのエクスポートを呼び出して全てをバックアップするスクリプト
- WSF : VBScript の 関数定義を WEB 上に置いて PC で使用する
- VBscript(または JScript) で簡単にバイナリファイルをアップロードする
- VBScript で Seesaaブログへ禁止ワード一括登録( アップロード )
- VBScript で半角カナから全角カナへ変換するのに、php の mb_convert_kana を呼び出す
- VBScript : URLEncode( OAuth 用 rfc3986 )
- VBS : Textt サービスに書き込んだテキストを PC にダウンロード(配布)する
- IE限定。信頼するサイトのページをボタンから印刷プレビュー表示する
【VBScript関連のカテゴリ】