2009年06月24日


MSXML2.XMLHTTPでファイルをアップロードする

呼び出し側は WSH としての VBScript です。
バイナリとしてアップロードするので、CRLF は CRLF のままなので、
LF へ変換が必要なファイルやシステムでは、サーバー側で変換する必要があります

PHP ならそのままで問題無いので、わざわざ 通常の POST 仕様にあわせる
必要も無いと思います。

そもそも、サンプルは Microsoft の サポートオンラインにあるので、
IIS ではうまくいくのかとは思うのですが、数年前に Flex から同様
の処理を行うと、IIS が固まった記憶があります。

どうせ Apache サーバ で実装するのであまり深追いしませんでした。
いずれにしても、IIS に対して行う場合はテストが必要です

VBSCript 側
' XMLHTTP を作成
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
' Stream オブジェクト の作成
Set Stream = CreateObject("ADODB.Stream")
' Stream のオープン
Stream.Open
' Stream タイプの指定
Stream.Type = 1		' StreamTypeEnum の adTypeBinary
' 既存ファイルの内容を Stream に読み込む
Stream.LoadFromFile "target.txt"

Call objHTTP.Open("POST","http://winofsql.jp/php/webdesktop/upload.php",False)
Call objHTTP.SetRequestHeader("Content-Length",Stream.Size)
Call objHTTP.Send(Stream.Read(Stream.Size))
Wscript.Echo objHTTP.responseText
 
' Stream を閉じる
Stream.Close


PHP側
<?
header( "Content-Type: text/html; Charset=shift_jis" );

$fp = fopen( "php://input", "rb" );
$wfp = fopen( "upload.dat", "wb" );

while( $ret = fread( $fp, 4096 ) ) {

	fwrite( $wfp, $ret );

}

fclose($wfp);
fclose($fp);


?>
データが保存されました

PHP を SHIFT_JIS で書いているので、http ヘッダに同じように
設定しておかないと、XMLHTTP が日本語の変換をできないので注意して下さい。
通常通り、使用しているキャラクタセットと http ヘッダを一致
させればどのキャラクタセットでも問題ありません。

但し、HTML 等の静的ページでは、サーバ側でキャラクタセツトの設定
ができない場合は、UTF-8 扱いになってしまいます


■ 関連する記事
PHP + VBS 分割ダウンロード
バッチ処理的ファイルのコピー
MSXML2.XMLHTTPでファイルをPOSTする
prototype.js の Ajax.Request を使い、FORM を使わずにデータをPOSTする

posted by at 2009-06-24 13:12 | Comment(0) | クライアント/サーバー | このブログの読者になる | 更新情報をチェックする
SQLの窓全体の検索
Loading
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。