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

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

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

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

Q&A

1回答

2248閲覧

laravel storeAsでファイルアップロードに失敗する

mmmomo

総合スコア0

Laravel

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

0グッド

0クリップ

投稿2021/05/15 11:24

前提・実現したいこと

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への理解が足りていないため、ものすごい凡ミスをしているかもしれないのですが、恥ずかしながらどうしても分からなかったので質問させていただきました。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

diff

1$randam = Str::random(10); 2$fileName = time() .'_'. $randam .'.'. $file->getClientOriginalExtension(); 3- $target_path = public_path('uploads/'); 4$request->file('image_path')->storeAs('uploads', $fileName);

これなら多分うまくいく

投稿2021/05/18 18:13

編集2021/05/18 18:14
phper.k

総合スコア3923

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

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

mmmomo

2021/05/18 19:24

ありがとうございます、ご教示いただいた通りコードを修正して試してみましたが、状況変わらずでした… (ファイル名は正しくDBに入るが、ファイルそのものがuploadsフォルダに入っていない) 画像処理の部分を以下の通り修正して確認しました $randam = Str::random(10); $fileName = time() .'_'. $randam .'.'. $file->getClientOriginalExtension(); $request->file('image_path')->storeAs('uploads', $fileName);
phper.k

2021/05/19 01:01

storage に書き込み権限あるの?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問