- JavaScriptから送信したいのでXMLHttpRequest Level2を利用する。
- IE9以降が必要。window.FormDataが真かで確認。
- formタグに enctype="multipart/form-data" 属性を設定。
- FormDataにファイルデータを含める。
- 以下で、フォームに含まれる全てのデータを設定。
var form = document.getElementById(<formのid>);
var formdata = new FormData(form);
- FormDataをjQuery.ajax()で送信するには、パラメータのdata:にFormDataオブジェクトを指定し、jQueryがデータを処理しないようにprocessData: false、contentTypeを設定しないようにcontentType: falseをあわせて指定する。
$.ajax({
type: 'POST',
url : 'url.php',
data: formdata,
processData: false,
contentType: false,
success: function(data) {alert("success")},
error: function(data) {alert("error:"+data.statusText);}
});
アップロードだとバイナリがそのまま送信されるので、base64のデコードは不要である。これをbase64でエンコードされたデータと同様に扱うには、base64でエンコードされた場合に冒頭に付加されるメディアタイプとbase64を付加する必要がある。データの例は以下の通り。
image/png;base64,<ここからbase64でエンコードされたデータ>
「,」の前までを付加することで、両者を共用することができる。