[解決方法]
Biz/Browserがサーバに対して送信できるのは、現状テキストデータのみとなります。
よってファイルのアップロードを実現するには、クライアントのみでなく、Webサーバ側でのプログラムが必要となります。
例えば、Biz/Browserでは、httpRequestクラスのSetHeaderメソッドでのHTTPヘッダの
Content-Typeの指定や、httpRequestクラスのWriteStringメソッドを使用して送信したいリクエストのメッセージボディ部を構築することができます。
これらを利用して、InternetExplorerのHTTPリクエストヘッダ情報と同様の送信内容を定義することができますので、Webサーバ側でのプログラムにて、受け取ったデータをデリミタを利用してファイルを構築することでアップロード機能が実現出来ます。
※注意※
SetHeaderメソッドでHTTPヘッダのContent-Typeを指定しますが、このメソッドはIEConnectまたはNSConnectを利用している場合動作しませんのでご注意ください。
Biz/Browserで操作できるローカルファイルは特定のディレクトリに格納されているものに限られる、という点です。コンピュータ上のすべてのファイルにアクセスできるわけではありません。
詳細は、オンラインマニュアル > FileSystemオブジェクト をご参照ください。
このファイルアップロード方法を利用する場合は、httpRequestクラスのaddParamメソッドを利用することはできません。
<<上記アップロード機能の実装方法>>
■デリミタ文字列の定義
String s_boundary = "---------------------------7d34926052c";
・デリミタとして、"--" + バウンダリ文字列 を定義します。
"7d34926052c"については任意の文字列が指定できます。
■SetHeaderメソッドの指定
req.SetHeader ( "Content-Type",
"multipart/form-data; boundary=" + s_boundary );
・パラメータを複数指定する可能性があるため、multipartで定義します。
■ファイル以外の送信パラメータの指定
WriteStringメソッドを利用して、以下の内容をメッセージボディに
追加します。
-----------------------------7d34926052c
Content-Disposition: form-data; name="<パラメータ名>"
<改行コード>
<パラメータ>
-----------------------------7d34926052c
例)
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;」は固定です。
・「name」にパラメータ名を記述してください。
■ファイルの送信パラメータの指定
WriteStringメソッドを利用して、以下の内容をメッセージボディに
追加します。
-----------------------------7d34926052c
Content-Disposition: ※
form-data; name="<パラメータ名>"; filename="<ファイル名>";
Content-Type:image/jpeg
<改行コード>
<ファイル内容>
-----------------------------7d34926052c
※Content-Dispositionは、filenameまでを1行で定義してください。
・「image/jpeg」には、サーバ側にファイルとして認識される別のContent-Type
を指定できます。
サーバ側にてContent-Typeで処理を分岐している場合には、厳密に指定する
必要があります。
|