ファイル

Q4
ファイルアップロード
[内容]
サーバへファイルをアップロードしたい

A4

[解決方法]
現状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メソッドを利用することはできません。

[サンプルコード]




CRSファイル形式のサンプル
   「ファイルアップロードサンプル (FileUploadSample.zip)
をご参照ください。
※CRS側のサンプルのみとなります。

管理番号:Fil_004
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser・Biz/Designer TIPS集 トップへ