前提・実現したいこと
laravel(6.20.26)で画像ファイルをアップロードしたい
(とりあえずローカルのpublic/uploadsフォルダに画像が入れば成功)
発生している問題・エラーメッセージ
・エラーメッセージは出ない
・ファイル名のDBへの登録はできているが、画像がpublic/uploadsフォルダに格納されない
該当のソースコード
php
1 2 protected function validator(array $data) 3 { 4 return Validator::make($data, [ 5 'image_path' => ['nullable','file','mimes:jpeg,png,jpg,bmb','max:2048'], 6 ]); 7 } 8 9 public function hoge($id, Request $request) 10 { 11 12 // バリデーションメソッドを呼び出す 13 $this->validator($request->all())->validate(); 14 15 $oldFileName = $this->user->selectUserFindById($id)->image_path; 16 17 // 画像処理 18 if ($file = $request->file('image_path')) { 19 $randam = Str::random(10); 20 $fileName = time() .'_'. $randam .'.'. $file->getClientOriginalExtension(); 21 $target_path = public_path('uploads/'); 22 // dd($request->file('image_path')); 23 $request->file('image_path')->storeAs($target_path, $fileName); 24 // $file->move($target_path, $fileName); 25 } else { 26 if ($request->image_delete) { 27 $fileName = ""; 28 } else { 29 $fileName = $oldFileName; 30 } 31 } 32 33 // フォームから渡されたデータの取得 34 $user = $request->post(); 35 36 if ($fileName) { 37 $user['image_path'] = $fileName; 38 } 39 40 // DBへ更新依頼 41 $this->user->updateUserFindById($user); 42 43 $name = $this->user->selectUserFindById($id)->name; 44 45 // ユーザー表示画面へリダイレクト 46 return redirect()->route('users.show', ['name' => $name]); 47 } 48
試したこと
・コメントアウトしている dd($request->file('image_path'));で、ちゃんと画像が取れている事までは確認できました。
・コメントアウトしている $file->move($target_path, $fileName);の方だと、なぜかDB書き込み&画像の保存が成功します。(bladeからの画像の読み込みも成功します)
公式のドキュメントだとファイル移動となっているので、逆に成功する理由がわかりません…。
補足情報(FW/ツールのバージョンなど)
Laravel 6.20.26
Docker 2.3
趣味で作りたいものがあり、最近プログラムをはじめました。
PHPおよびLaravelへの理解が足りていないため、ものすごい凡ミスをしているかもしれないのですが、恥ずかしながらどうしても分からなかったので質問させていただきました。
どうぞよろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/18 19:24
2021/05/19 01:01