質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

1回答

628閲覧

Laravel10でファイルを移動したい

sre_753

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2023/09/26 05:25

実現したいこと

・一時保存場所storage/temp_pet_img/から本番保存場所storage/pet_img/に画像ファイルを移動したい

前提

ここに質問の内容を詳しく書いてください。

現在、Laravel10で登録フォームからアップロードされた画像をpublic/storage配下に保存し、画像のファイル名をデータベースに登録する処理を作っています。

画像アップロードシステムを、『フォームでアップロードした画像の名前を日時付きのオリジナル名にして、一時保存場所のstorage/temp_pet_img/フォルダ内に保存し、確認画面でそれを表示し、完了画面に遷移する際に、一時保存場所storage/temp_pet_img/から本番保存場所storage/pet_img/に画像ファイルを移動し、ファイル名をデータベースに保存する』という流れで考えています。
一時保存場所storage/temp_pet_img/から本番保存場所storage/pet_img/に画像ファイルを移動以外の部分は完成しています。
しかし、画像ファイルの移動だけができません。

発生している問題・エラーメッセージ

$original=日時付きの画像ファイルのオリジナル名
・Storage::move('storage/temp_pet_img/'.$original, 'storage/pet_img/'.$original);と記述しているのですがファイルが動きません。
エラーも出ていません。

エラーメッセージ ```なし ### 該当のソースコード Laravel PHP ソースコード 確認画面のコントローラーの処理 public function MyPetConfirm(PetRequest $request) { //フォームから受け取った全てのinputの値を取得 $pet = $request -> all(); if(request('pet_img')){ //pet_imgというファイルの元々の名前を$originalに代入する $original = request() -> file('pet_img') -> getClientOriginalName(); //元々のファイル名に日時を加えた名前をファイル名として$nameに代入する $img_name = date('Ymd_His').'_'.$original; //pet_imgというファイルをstorage/pet_imgに$nameの名前で保存する $file = request() -> file('pet_img')-> move('storage/temp_pet_img',$img_name); //↑ここまでで画像自体の保存は完了 //確認画面のviewに変数を渡して表示 return view('mypage.pet.myPet_confirm', [ 'pet' => $pet, 'img_name' => $img_name, ]); }else{ //確認画面のviewに変数を渡して表示 return view('mypage.pet.myPet_confirm', [ 'pet' => $pet, ]); } } 完了画面のコントローラーの処理 public function MyPetComplet(Request $request) { //フォームから受け取ったactionの値を取得 $action = $request -> input('action'); //フォームから受け取ったactionを除いたinputの値を取得 $pet = $request -> except('action'); //actionの値で分岐 if($action !== 'submit'){ return redirect() -> route('myPet_make') ->withInput($pet); } else { if($pet['pet_img']){ $original = $pet['pet_img']; $oldPath = 'storage/temp_pet_img/'.$original; $newPath = 'storage/pet_img/'.$original;      //一時保存場所storage/temp_pet_img/から本番保存場所storage/pet_img/に     画像ファイルを移動 Storage::move($oldPath, $newPath); //↑ここまでで画像自体の保存は完了 } //トランザクション \DB::beginTransaction(); try { //dd($contact); //po新規会員を登録 Pet::create([ 'pet_img' => $pet['pet_img'], 'name' => $pet['name'], 'animal' => $pet['animal'], 'breed' => $pet['breed'], 'birth' => $pet['birth'], 'sex' => $pet['sex'], 'rv_day' => $pet['rv_day'], 'vac_day' => $pet['vac_day'], 'po_user_id' => $pet['po_user_id'], ]); //dd($contact); \DB::commit(); } catch(\Throwable $e) { \DB::rollback(); //abort(500); echo "接続失敗: " . $e -> getMessage() . "\n"; exit(); } //完了画面のviewを表示 return view('mypage.pet.myPet_complet'); } } } ### 試したこと Storage::moveについて調べ、以下の書き方を試しました。 $original=日時付きの画像ファイルのオリジナル名 ・Storage::move('storage/temp_pet_img/'.$original, 'storage/pet_img/'.$original); ・Storage::move('storage/temp_pet_img/$original', 'storage/pet_img/$original'); ・$original -> move('storage/temp_pet_img/', 'storage/pet_img/'); ・$oldPath = 'storage/temp_pet_img/'.$original; $newPath = 'storage/pet_img/'.$original; Storage::move($oldPath, $newPath); 移動先のディレクトリを先に作らないといけないという情報があったためstorage配下にpet_imgフォルダを作りました。 しかしうまく動きませんでした。 ### 補足情報(FW/ツールのバージョンなど) Laravel10 ここにより詳細な情報を記載してください。 プログラミングを始めたばかりで質問の内容がおかしな点があるかと思いますがご容赦ください。 よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

確認画面のビューにimg_nameという画像ファイル名を渡していますが
完了処理でpet_imgという変数をチェックしているので画像の保存場所の移動処理を
全く通っていないだけという可能性はないでしょうか。
htmlファイルが見れていないので不明ですが。

仮にif文内が実行されているというならmove()はtrue falseを返すのでログに書き出してみてください。

if (Storage::move($oldPath, $newPath)) { logger("成功 $oldPath -> $newPath"); } else { logger("失敗 $oldPath -> $newPath"); }

ログファイルで成功したか失敗したか確認してください。
storage/logs/laravel.log

投稿2023/09/26 11:29

niiyz

総合スコア131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sre_753

2023/09/27 14:21

コメントありがとうございます。 もう少し頑張って解決策を探っていこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問