ajaxでファイルのアップロードシステムを作っています。
1ファイルずつをフォルダ分けしてアップロードすることはできています。
例えばこのような感じです。
aファイルを選択、アップロードボタンクリック、Aフォルダへアップロード 完了
次に
bファイルを選択、アップロードボタンクリック、Bフォルダへアップロード 完了
これを
aファイル選択、bファイル選択、1つのアップロードボタンクリックでaファイルはAフォルダへ、bファイルはBフォルダへアップしたいと思っています。
ajaxをループで回すなども考えたのですがうまく考えがまとまりません。
実現するために考えられる方法をご教示いただければと思います。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
どのフォルダにアップされるかはサーバー側の仕様ですから
適当な目印を一緒におくってあげてそれを使って
サーバーサイドで振り分ければいいでしょう
formが別れている場合
formのatcionで処理を分ける
- x.html
html
1<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 2<script> 3$(function(){ 4 $('#btn').on('click',function(){ 5 $('[type=file]').each(function(){; 6 var fd = new FormData(); 7 var name=$(this).attr('name'); 8 var action=$(this).closest('form').attr('action'); 9 var file=$(this).prop('files')[0]; 10 var fr = new FileReader(); 11 fr.addEventListener("load", function(e){ 12 fd.append(name, new Blob([e.target.result],{"type":file.type}),file.name ); 13 $.ajax({ 14 "url":action, 15 "type":"post", 16 "data":fd, 17 "cache":false, 18 "processData": false, 19 "contentType": false, 20 }).done(function(data){ 21 console.log(data); 22 }); 23 }); 24 fr.readAsArrayBuffer(file); 25 }); 26 }); 27}); 28</script> 29<form method="post" action="y.php" enctype="multmultipart/form-data"> 30<input type="file" name="a"><br> 31</form> 32<form method="post" action="z.php" enctype="multmultipart/form-data"> 33<input type="file" name="b"><br> 34</form> 35<input type="button" value="send" id="btn"><br>
- y.php
PHP
1<?PHP 2print_r($_FILES);
- z.php
PHP
1<?PHP 2print_r($_FILES);
一つのformから
- x.html
HTML
1<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 2<script> 3$(function(){ 4 $('#btn').on('click',function(){ 5 var fd = new FormData(); 6 var defs=[]; 7 $(this).closest('form').find('[type=file]').each(function(){; 8 var name=$(this).attr('name'); 9 var def=$.Deferred(); 10 var file=$(this).prop('files')[0]; 11 var fr = new FileReader(); 12 fr.addEventListener("load", function(e){ 13 fd.append(name, new Blob([e.target.result],{"type":file.type}),file.name ); 14 return def.resolve(); 15 }); 16 fr.readAsArrayBuffer(file); 17 defs.push(def.promise()); 18 }); 19 $.when.apply(null,defs).then(function(){ 20 $.ajax({ 21 "url":"y.php", //とりあえず決め打ち 22 "type":"post", 23 "data":fd, 24 "cache":false, 25 "processData": false, 26 "contentType": false, 27 }).done(function(data){ 28 console.log(data); 29 }); 30 }); 31 }); 32}); 33</script> 34<form method="post"> 35<input type="file" name="a"><br> 36<input type="file" name="b"><br> 37<input type="button" value="send" id="btn"><br> 38</form>
- y.php
PHP
1<?PHP 2print_r($_FILES);
投稿2018/10/04 02:47
編集2018/10/04 03:59総合スコア114863
0
質問の内容からは、つまづいている箇所がjavascript部分(クライアントサイド)か、php部分(サーバサイド)か、読み取れませんでした。
jqueryを使ってよければ、
jQuery-File-Upload
を使用するのはいかがでしょうか。リンク先にphpのサーバサイドのサンプルもあります。
投稿2018/10/04 02:56
編集2018/10/04 03:10総合スコア25
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/04 03:15
2018/10/04 03:22
2018/10/04 03:39
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/04 03:38 編集
2018/10/04 03:42 編集
2018/10/04 04:01
2018/10/04 04:46
2018/10/04 04:59