###実現したいこと
画像アップロード機能を実装しています。画像以外のデータをPHPで受け取りたいです。
###発生している問題
以下のようにFormData()
に.append()
しているのですが、PHPで受け取れるのはfile
だけで、それ以降にapend()
したはずのprocess
やaciton
が受け取れません。
###該当のソースコード
このPHPですが、res
に向かってempty
を返してしまうのが問題です。
php
1function my_ajax_upload_photos() { 2 3 $file = $_FILES['file'] ?? ''; 4 $process = $_FILES['process'] ?? ''; 5 6 if( $file === '' || $process === '' ) die('empty'); 7 8 // 受け取った値がきちんとあればこれ以降の処理を実行していく 9}
上記PHPに送っているjQueryはこちらになります。
html
1<input type="file" class="input_file" name="img_file" value="" accept="image/*">
jQeury
1$(document).on('change','.input_file', function(e){ 2 console.log('ファイルが選択されました'); 3 const file = e.target.files[0]; 4 5 // FileReader オブジェクト 6 let reader = new FileReader(); 7 reader.readAsDataURL(file); 8 reader.onloadend = function(){ 9 const fileReader = this; 10 const base64_str = fileReader.result || ''; 11 if( base64_str ){ 12 const type = file.type; 13 if( type === 'image/jpeg' || type === 'image/png' ){ 14 $('img.target').attr( 'src', base64_str ); // 選択画像を表示 15 }else{ 16 console.log('画像じゃないとダメです'); 17 } 18 } 19 }; 20 21 // 送信データ 22 let fd = new FormData(); 23 fd.append( 'file', file ); 24 fd.append( 'action', 'my_ajax_upload_photos' ); 25 fd.append( 'process', 'default' ); 26 27 // 保存 28 $.ajax({ 29 url: 'http://...', 30 type: 'POST', 31 data: fd, 32 processData: false, 33 contentType: false 34 }) 35 .done(function(res){ 36 c('res=', res); // die('empty') されてしまう 37 }) 38 .fail(function(XMLHttpRequest, textStatus, errorThrown) { 39 }); 40});
###試したこと
$_FILES['file']
だけならできました。
なので、もしかしたら$_FILES
で送れるのは一つだけなのかと考えました。
そこで、append()
を一つだけにして、まとめてfiles
というオブジェクトで送ってみました。
jQuery
1$(document).on('change','.input_file', function(e){ 2 console.log('ファイルが選択されました'); 3 const file = e.target.files[0]; 4 5 // FileReader オブジェクト 6 /*---- 7 同上 8 -----*/ 9 10 // 送信データ 11 let fd = new FormData(); 12 const files = { 13 file : file, 14 action : 'my_ajax_upload_photos', 15 process: 'default' 16 }; 17 fd.append( 'files', files ); 18 19 // 保存 20 /*---- 21 同上 22 -----*/ 23});
でPHPもfiles
の1つだけを受け取ったのですが、こうするとJSのres
に向かって何かが返ることもなく400エラーとなってしまいます。
php
1function my_ajax_upload_photos() { 2 3 $files = $_FILES['files'] ?? ''; 4 $file = $files['file'] ?? ''; 5 $process = $files['process'] ?? ''; 6 7 if( $file === '' || $process === '' ) die('empty'); 8 9 // 受け取った値がきちんとあればこれ以降の処理を実行していく 10}
どのようにしましたら、FormData()
に.append()
した複数の値をPHPで受け取ることができるでしょうか。
ご回答どうぞ宜しくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/09 13:44
2020/06/09 13:48