Dabten Usage : multipart/mixed (methods)

試食版その漆(1.0.g)から試食版その捌(1.0.h)へのアップデートに伴う仕様変更

試食版その漆 (1.0.g)から試食版その捌 (1.0.h)はMIME-Typeがtext/*はそのまま、それ以外はescape()を使用したエンコード(英数記号以外は全て%nn形式)したテキストデータとして送信します。

UP PREV NEXT

Dabten.Net.Load() multipart/form-data仕様

methodを"POST"、enctypeを"multipart/form-data"または"multipart/mixed"を指定してください。

送信データはRFC2388 multipart/form-dataの仕様に準じ、一般的な<form>を使用して送信した場合とほぼ同じになります。

XMLHttpRequestの仕様上、テキストデータでなければならないため、 試食版その漆 (1.0.g)までは全てのデータをencodeURIComponent()を使用したURLエンコード(英数と一部の記号以外を%nn形式する)、
試食版その捌 (1.0.h)はMIME-Typeがtext/*はそのまま、それ以外はescape()を使用したエンコード(英数記号以外は全て%nn形式)したテキストデータとして送信します。

個々のデータの、ヘッダの変更

postDataの内容をオブジェクトの配列にすることで、個々の値に任意のヘッダを付与することができます。
XMLHttpRequestのRequest Headerに相当します。

{name: 'name', filename: 'filename', disposition: 'form-data', contentType: 'text/plain', data: 'data' , headers: {} }
name (String , 必須)
フォームフィールドのname属性に相当します。
application/x-www-form-urlencoded使用時のkey=valueの組み合わせでは、keyに相当します。
filename (String , default: null)
inputエレメントをtype="file"にしたときに付与されるデータです。
なお、JavaScriptではファイルを送信することはできません
disposition (String , default: null)
データ種別の指定。
通常はCGIプログラムが無視します。
contentType (String , default: 'text/plain')
MIME-Typeの指定
data (String , default: '')
送信データ
application/x-www-form-urlencoded使用時のkey=valueの組み合わせでは、valueに相当します。
headers (Object , default: null)
任意のHTTPヘッダ
---- サンプル ----

var postdata=[
    {name:'home',  data:'https://home.wi-wi.jp', headers:{'x-header-type':'url'}}
   ,{name:'sozai', data:'https://sozai.wi-wi.jp/', disposition:'alternate', headers:{'x-header-type':'url'}}
   ,{name:'wataru', data:'dabten@example.com', disposition:'inline', headers:{'x-header-type':'mail'}}
];

Dabten.Net.Load('sender.cgi', callback,
           {postData: postdata, method:'POST', enctype:'multipart/form-data'});

サーバーに送信されるデータ

------boundary
Content-Type: text/plain; charset="utf-8";
Content-Disposition: form-data; name="home";
x-header-type: url;

http%3A%3D%3Dhome.wi-wi.jp%3D
------boundary
Content-Type: text/plain; charset="utf-8";
Content-Disposition: alternate; name="sozai";
x-header-type: url;

http%3A%3D%3Dsozai.wi-wi.jp%3D
------boundary
Content-Type: text/plain; charset="utf-8";
Content-Disposition: inline; name="wataru";
x-header-type: mail;

dabten%40example.com
------boundary--

---- サンプル ----

var tpls={
    tpl1: 'container.txt'
   ,tpl2: 'mytable.txt'
};
var postdata={page: '3 and any data' };

Dabten.LoadMixed('sender.cgi', tpls, {postData: postdata});

サーバーに送信されるデータは

------boundary
Content-Type: text/plain; charset="utf-8";
Content-Disposition: form-data; name="tpl1"; filename="container.txt";

tpl1%3Dcontainer.txt
------boundary
Content-Type: text/plain; charset="utf-8";
Content-Disposition: form-data; name="tpl2"; filename="mytable.txt";

tpl2%3Dmytable.txt
------boundary
Content-Type: text/plain; charset="utf-8";
Content-Disposition: form-data; name="page";

3%20and%20any%20data
------boundary--

となります。(順不同です。)

テンプレートIDの指定(第二引数)を{tpl1:'container.txt'}とした場合、
<input type="file" name="tpl1">
というフォームフィールドを作成し、container.txtというファイル名で、内容がtpl1=container.txtと書かれたテキストファイルを送信した場合と同じになります。

multipart/mixedでは、Content-Dispositionをmixedとし、nameとfilenameはform-dataと同じです。

multipart/form-dataのヘッダ部分(だぶ天が生成します)の改行コードはCRLFですが、postDataに含まれるデータは変換を行いません。

---- サンプル ----

テンプレートのファイル名は省略可能です。
テンプレートIDがname、テンプレートファイル名がfilenameとし、本文にContent-Type: text/plainとして、URLエンコードされたQUERY_STRING形式でプロパティ名とファイル名が連結されます。
テンプレートのファイル名を省略した場合は、Content-Dispositionのfilenameは送信されません。

var tpls={
    tpl1: ''
   ,tpl2: ''
};
Dabten.LoadMixed('sender.cgi', tpls);

サーバーに送信されるデータ

------boundary
Content-Type: text/plain; charset="utf-8";
Content-Disposition: form-data; name="tpl1";

tpl1%3D
------boundary
Content-Type: text/plain; charset="utf-8";
Content-Disposition: form-data; name="tpl2";

tpl2%3D
------boundary--

UP PREV NEXT

Dabten.LoadMixed(uri, tpls, opts) 送信データ仕様

送信データはRFC2388 multipart/form-dataの仕様に準じ、一般的な<form>を使用して送信した場合とほぼ同じになります。
テンプレートIDがname、テンプレートファイル名がfilenameとし、本文にContent-Type: text/plainとして、URLエンコードされたQUERY_STRING形式でプロパティ名とファイル名が連結されます。

---- 引数 ----

uri

データを送受信するCGIアプリケーション、またはテキストファイルを指定

tpls

テンプレートIDとテンプレートファイルの組み合わせ。

CGIアプリケーションで参照しない場合にはファイル名を""としても構いませんが、
テンプレートIDと、受信データに含まれるIDが一致しない場合は、テンプレートの作成を行いません。

opts

multipart/form-dataの付属データとして送信します。

---- サンプル ----

var tpls={
    tpl1: 'container.txt'
   ,tpl2: 'mytable.txt'
};
var postdata={page: '3 and any data' };

Dabten.LoadMixed('sender.cgi', tpls, {postData: postdata});

サーバーに送信されるデータは

------boundary
Content-Type: text/plain; charset="utf-8";
Content-Disposition: form-data; name="tpl1"; filename="container.txt";

tpl1%3Dcontainer.txt
------boundary
Content-Type: text/plain; charset="utf-8";
Content-Disposition: form-data; name="tpl2"; filename="mytable.txt";

tpl2%3Dmytable.txt
------boundary
Content-Type: text/plain; charset="utf-8";
Content-Disposition: form-data; name="page";

3%20and%20any%20data
------boundary--

となります。(順不同です。)

テンプレートIDの指定(第二引数)を{tpl1:'container.txt'}とした場合、
<input type="file" name="tpl1">
というフォームフィールドを作成し、container.txtというファイル名で、内容がtpl1=container.txtと書かれたテキストファイルを送信した場合と同じになります。

multipart/mixedでは、Content-Dispositionをmixedとし、nameとfilenameはform-dataと同じです。

multipart/form-dataのヘッダ部分の改行コードはCRLFですが、postDataに含まれるデータは変換を行いません。

---- サンプル ----

テンプレートのファイル名は省略可能です。
テンプレートのファイル名を省略した場合は、Content-Dispositionのfilenameは送信されません。

var tpls={
    tpl1: ''
   ,tpl2: ''
};
Dabten.LoadMixed('sender.cgi', tpls);

サーバーに送信されるデータ

------boundary
Content-Type: text/plain; charset="utf-8";
Content-Disposition: form-data; name="tpl1";

tpl1%3D
------boundary
Content-Type: text/plain; charset="utf-8";
Content-Disposition: form-data; name="tpl2";

tpl2%3D
------boundary--

UP PREV NEXT

Dabten.LoadMixed() 受信

サーバーが送信すべきデータは、基本的には送信時のフォーマットと同じです。
本文中にテンプレート本文を入れてください。
HTTPヘッダ内のContent-Typeヘッダにcharsetを必ず入れてください
これがないとIE6でフリーズします。

---- サンプル .1 ----

分割されるデータのヘッダにcharset指定は任意ですが、本文中のcharasetはUTF-8で記述してください。
RFCで定義されるmultipart/mixedの改行コードはCRLFですが、だぶ天では改行コードはCR/CRLF/LFのいずれもサポートしています。

Content-Type: multipart/mixed; charset="utf-8"; boundary="abcedfghijklmn"

--abcedfghijklmn
Content-Type: text/plain;
Content-Disposition: form-data; name="tpl1"; filename="container.txt";

<div id="mycontainer">
<h3>Templates 3</h3>
<div id="dataes"></div>
--abcedfghijklmn
Content-Type: text/plain;
Content-Disposition: form-data; name="tpl2"; filename="mytable.txt";

<table>
<tr>{tpl:value}</tr>
</table>
--abcedfghijklmn--

---- サンプル .2 ----

MIME-Typeにtext/plainを指定し、1行目にmultipart/mixedのヘッダを出力することで、だぶ天がmultipart/mixedとみなして受信します。
CGIを使えない、またはmultipart/*のデータを作成できない環境でも、通常のテキストファイルから作成することができます。
なおiCabではmultipart/*の受信はできません

Content-Type: text/plain

Content-Type: multipart/mixed; charset="utf-8"; boundary="abcedfghijklmn"
--abcedfghijklmn
Content-Type: text/plain;
Content-Disposition: inline; name="tpl1"; filename="container.txt";

<div id="mycontainer">
<h3>Templates 3</h3>
<div id="dataes"></div>
--abcedfghijklmn
Content-Type: text/plain;
Content-Disposition: inline; name="tpl2"; filename="mytable.txt";

<table>
<tr>{tpl:value}</tr>
</table>
--abcedfghijklmn--

---- ダウンロード ----

マルチパートミックスデータ作成用のテンプレートです。
自由に改編して使用してください。

ダウンロード