upload_target.php ※ upload_target.php と同じ場所にアップロードされたファイルを作成します。関連する記事 ファイルのアップロード時のデータのダンプ 仕様を確認したわけではありませんが、boundary は、境界識別する為のユニークな文字列であると思われます。http ヘッダで指定した文字列を x とすると --x が境界で、改行コードが付加されます。一番最後の境界は --x-- です。
<!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関連のカテゴリ】







