掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ブラウザ経由でアップロード (msxml) (ID:83539)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> ブラウザの指定のインプット項目=Uploadにファイル名(文字)を > 入力して、submitすることを自動化したいのですが その方法(RFC1867)以外で送信しても、問題ありませんか? <input type=file>の方式で送信しても良いのですが、それをXMLHTTPで行おうとすると、エンコードが少々面倒かと思いますよ。 例えば、ASP側で BASP21.DLLのFormSaveAsメソッド等を利用されている場合は、Content-Typeヘッダでmultipart/form-dataを指定し、かつ、xmlHttp.send に渡すデータを、エンコード処理しておく必要がありますよね。 しかし例えば、送り側を Dim B() As Byte B = ファイルの生データ xmlHttp.send CVar(B) のようにして、ASP側を Set X = Server.CreateObject("ADODB.Stream") X.Open X.Type = 1 'バイナリモード(adTypeBinary ) If Request.TotalBytes = 0 Then X.Write Request.BinaryRead(Request.TotalBytes) X.Position = 0 X.SaveToFile strServerHDDPath, 2 'adSaveCreateOverWrite End If のように、Stream.SaveToFileで保存するような場合は、Content-Typeヘッダの指定は不要となります。 この方式の場合、ファイルのバイナリをそのまま渡せるので、エンコード処理も不要ですし、送信するデータ量も小さくできますよ。 > ここの最後の行 xmlhttp.sendで必ずハングします。 XMLHTTPの同期モードで送信されていますよね。 ためしに、非同期モードでもハングするかどうかを確認してみてください。 データ量が多い場合、サーバとの送受信に時間がかかりますので、通信が完了するまで、送り側のプログラムは凍ったように見えるかと思います。 もし、データ量が多いようであれば、必要に応じて、分割してアップロードする事も検討してみては如何でしょうか。 あるいは、他のアップロード手法…例えば、FTPとかWebDAVとか…を利用して見るのも手かも知れませんよ。(IISなら、WebDAVもサポートされていますしね) -------- ちなみに私も、xmlHttp.send でアップロードするシステムを、何度か作っています。(^^; その場合、サーバ側に正しくアップロードされたかを確認するために、ASP側で保存処理終了後に、そのファイルのMD5値を調べ(BASP21.DLLを利用)、その値を Response.AddHeader メソッドで送り返すようにしています。 クライアント側は xmlHttp.sendの完了後に、xmlHttp.getResponseHeader にてそのMD5値を受け取り、送信したファイルのMD5値と比較して、同じバイナリになっているかどうかを比較する…という処理にしています。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.