[解決方法]
現状Biz/Browserでは、ファイルを指定してサーバへ送り込むようなメソッドはございません。
Biz/Browserがサーバに対して送信できるのは、getやpostメソッドによるテキストデータ
のみとなります。
このため、ファイルのアップロードを実現するには、クライアントから送信されたテキスト
データをサーバ側のアプリケーションで受け取り、ファイルを構築していただく処理が
必要となります。
なお、Biz/Browser Vでは、ファイルをサーバへアップロードするHttpSession.Putメソッドが
実装されています。
例えば、Biz/Browserでは、httpRequestクラスのSetHeaderメソッドを使用してHTTPヘッダの
Content-Typeの指定(※1)、httpRequestクラスのWriteStringメソッドを使用して、送信したい
リクエストの
メッセージボディ部(※2)を構築を行い、上記イメージのような
Internet ExplorerのHTTPリクエスト情報と同様の内容を定義し、送信することができます。
サーバ側のアプリケーションでは、この送信データを解析し、ファイルの構築をする
アプリケーションが必要となります。
<<送信データ定義方法>>
■デリミタ文字列の定義
String s_boundary = "---------------------------7d34926052c";
・デリミタ(パラメータの区切り文字)として、"--" + バウンダリ文字列
を定義します。
"7d34926052c"の部分は任意の文字列が指定できます。
■SetHeaderメソッドの指定
req.SetHeader ( "Content-Type",
"multipart/form-data; boundary=" + s_boundary );
・ファイルアップロードのためのリクエストヘッダを上記のように 設定します。
■ファイル以外の送信パラメータの指定
ファイルデータと共にTextBoxなど、画面上で入力された値を送信する場合、
WriteStringメソッドを利用して、以下の内容をメッセージボディに
追加します。
-----------------------------7d34926052c
Content-Disposition: form-data; name="<パラメータ名>"
<改行コード>
<パラメータ>
-----------------------------7d34926052c (次のパラメータとの区切り)
例)
req.WriteString("--" + s_boundary + "\r\n");
req.WriteString("Content-Disposition: form-data; name=\""
+ "t_param1" + "\"\r\n");
req.WriteString("\r\n");
req.WriteString(Form1.t_param1.Value);
・「Content-Disposition: form-data;」は固定です。
・<パラメータ名>にサーバ側でパラメータ処理する際の
名称を指定します。
・<パラメータ>には、画面で入力された値を指定します。
■ファイルの送信パラメータの指定
送信するファイルデータのパラメータ指定するには、
WriteStringメソッドを利用して、以下の内容をメッセージボディに
追加します。
-----------------------------7d34926052c (前のパラメータとの区切り)
Content-Disposition: ※
form-data; name="<パラメータ名>"; filename="<ファイル名>";
Content-Type:image/jpeg ※
<改行コード>
<ファイル内容>
-----------------------------7d34926052c
例)
req.WriteString("--" + s_boundary + "\r\n");
req.WriteString("Content-Disposition: form-data; name=\""
+ "upload_data" + "\"; filename=\""
+ Form1.t_filename.Value + "\"\r\n");
req.WriteString("Content-Type: " + "image/jpeg" + "\r\n");
req.WriteString("\r\n");
req.WriteString(Form1.upload_data.Value);
req.WriteString("\r\n");
/* パラメータの終わりをあらわす区切り */
req.WriteString("--" + s_boundary + "--\r\n\r\n");
・<パラメータ名>にサーバ側でパラメータ処理する際の名称を指定します。
・<ファイル名>に転送するファイルのファイル名を指定します。
・<ファイル内容>に送信するファイルの中身(File.read
メソッドで読み込んだデータなど)を指定します。
※Content-Dispositionは、filenameまでを1行で定義してください。
※サーバ側にてContent-Typeで処理を分岐している場合には、「image/jpeg」は、
厳密に指定するよう注意してください。
※注意※
(1)SetHeaderメソッドでHTTPヘッダのContent-Typeを指定しますが、
このメソッドはIEConnectを利用している場合動作しませんので
ご注意ください。
(2)このファイルアップロード方法を利用する場合は、httpRequestクラスの
addParamメソッドを利用することはできません。
|