前提
ajaxを利用したファイルアップロードを行いたいのですが
コントローラファイル側で画像情報を受け取ることができません
実現したいこと
ajaxを利用してコントローラファイルで画像情報を受け取ること
該当のソースコード
js
1// メッセージを送信したとき 2$(document).on('click', ".message_submit", function() { 3 $.ajaxSetup({ 4 headers: { 5 "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"), 6 }, 7 }); 8 var current_user_id= $('.current_user_id').val(), 9 user_id = $('.destination_user_id').val(), 10 text = $('#message_counter').val(), 11 date=new Date(), 12 h = date.getHours(), 13 mi = date.getMinutes(), 14 hh = ('0' + h).slice(-2), 15 mmi = ('0' + mi).slice(-2), 16 day = hh + ':' + mmi; 17 18 //アップロードするファイルのデータ取得 19 var fiup_file = document.getElementById("my_image").files[0]; 20 //フォームデータを作成する 21 let form = $('#upload-form').get()[0];//フォームデータを格納 22 //フォームデータにアップロードファイルの情報追加 23 var formData = new FromData(form);//FormDataオブジェクト作成 24 $.ajax({ 25 type: 'POST', 26 url: '/ajax_message_process', 27 dataType: 'text', 28 data: { 29 current_user_id: current_user_id, 30 user_id: user_id, 31 text: text, 32 image: form 33 }, 34 processData: false, 35 contentType: false, 36 }).done(function() { 37 $('.message_add').replaceWith('<div class="my_message"><div class="mycomment right"><span class="message_created_at"> '+ day +' </span><p>'+text+'</p><img src='+current_user_img+' class="message_user_img"></div></div><input type="hidden" class="message_add">'); 38 $('#message_counter').val(''); 39 $('html, body').scrollTop($(document).height()); 40 }).fail(function() {}); 41});
php
1 public function ajax_message_process(Request $request) 2 { 3 $current_user = Auth::user(); 4 $date = new DateTime(); 5 $date->modify('+9 hour'); 6 $created_at = $date->format('Y-m-d H:i:s'); 7 if ($request->file('image') != '') { 8 $file_name = $request->file('image')->getClientOriginalName(); 9 $request->file('image')->storeAs('public/sample', $file_name); 10 $image = 'storage/sample/' . $file_name; 11 $param = [ 12 'user_id' => $current_user->id, 13 'destination_user_id' => $request->user_id, 14 'text' => $request->text, 15 'image' => $image, 16 'created_at' => $created_at, 17 ]; 18 } else { 19 $param = [ 20 'user_id' => $current_user->id, 21 'destination_user_id' => $request->user_id, 22 'text' => $request->text, 23 'created_at' => $created_at, 24 ]; 25 } 26 DB::table('messages')->insert($param); 27 }
試したこと
画像取得方法はこちらのサイトを参考にしました。
https://qiita.com/hotate_chan/items/ad38b62278b32079aa32
controller.php
1: 2 $created_at = $date->format('Y-m-d H:i:s'); 3log::debug($request->file('image')); 4 if ($request->file('image') != '') { 5:
このようにログを取得しているのですが、結果は空です。