2018/08/20

Springでファイルアップロードをしようとして、Ajaxでファイルを送りつける仕組みにしております。
sponsored link
普通にFromData使えばいいんじゃね?と思ったのですが
とりあえず以下をご覧ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$("#exuploadform").on('submit',function(event) { // 要素規定の動作をキャンセルする event.preventDefault(); var ajaxUrl = "/api/dictcontroller/upload"; // ファイル種類 if(window.FormData){ var objs = $(this)[0]; var formDatas = new FormData(objs); console.log("printformdata"); for(item of formDatas){ console.log(item[0], item[1]); } $.ajax({ type : "POST", // HTTP通信の種類 url : ajaxUrl, // リクエストを送信する先のURL dataType : "text", // サーバーから返されるデータの型 data : formDatas, // サーバーに送信するデータ processData : false, contentType: false, }).done(function(data) { // Ajax通信が成功した時の処理 alert("アップロードが完了しました。"); }).fail(function(XMLHttpRequest, textStatus, errorThrown) { // Ajax通信が失敗した時の処理 alert("アップロードが失敗しました。"); }); }else{ alert("アップロードに対応できていないブラウザです。"); } }); } |
実際にサーバにとんだデータを見てみると、見事にバイナリデータが空っぽです。
上手く生成されません・・・。昨日3時間ぐらい悩んだのですが、結局うまくいかず、FormData動的生成は
あきらめて、以下のようにしました。
修正後
1 2 3 4 5 6 |
if(window.FormData){ var objs = $(this)[0]; var formDatas = new FormData(); formDatas.append('upload_file', $('#upload_file')[0].files[0]); formDatas.append('file_name', $('#file_name')[0].value); $.ajax({ |
自分で要素全部突っ込んだよ・・・。
こんなんでいいのか・・・。まぁとりあえず動くから良いか・・・