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

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

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

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

Q&A

解決済

1回答

3142閲覧

LaravelをEC2にデプロイ後、画像が表示されない

fork_

総合スコア43

Laravel

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

0グッド

0クリップ

投稿2020/04/14 13:01

編集2020/04/14 14:32

LaravelをAWSのEC2へデプロイする手順を参考にさせていただき、EC2の中に作成中のLaravelアプリケーションをデプロイしました。
ローカル環境上では、プロフィール画像を指定しなければ、デフォルトの画像が割り当てられるように、storageに対してシンボリックリンクを貼ることにより、デフォルトの画像を表示することができました。
EC2にデプロイした後に、同じような形でデフォルト画像を表示したいのですが、表示されませんでした。
一度、public/storageを削除し、php artisan storage:link として、再度シンボリックリンクを貼ってもうまくいきませんでした。
他に、該当する箇所等ありますでしょうか??
laravelのバージョンは、下記になります。
Laravel Framework 5.8.37

イメージ説明

イメージ説明

イメージ説明

画像表示部分のコードはこちらになります。

@auth <!-- プロフィール画像が無かったら、デフォルトの画像を設定する --> @if($user->profile_image == null) <img src="/storage/noimage.png" style="width:50px; height:50px; border-radius:50%; position:relative; top: 79px; left: 35px;"> @else <img src="{{ $user->profile_image }}" style="width:50px; height:50px; border-radius:50%; position:relative; top: 79px; left: 35px;"> @endif

コントローラーのコードは、こちらになります。

<?php namespace App\Http\Controllers; use App\Post; use Storage; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class PostsController extends Controller { public function index() { //ログインしているユーザー情報を取得 $user = Auth::user(); $posts = Post::all(); return view('posts.index',['posts' => $posts,'user'=>$user]); } public function store(Request $request) { $request->validate([ 'text' => 'required', ]); // モデルからインスタンスを生成 $post = new Post; // postsテーブルのtextに、フォームから送られたtextを保存する $post->text = $request->text; // userテーブルのidを、postsテーブルのuser_idとして保存する $post->user_id = $request->user()->id; // フォームリクエストの中に、画像ファイルが含まれているかどうかを条件分岐 if($request->hasFile('image')){ //s3アップロード開始 $image = $request->file('image'); // バケットの`test`フォルダへアップロード $path = Storage::disk('s3')->putFile('test', $image, 'public'); // アップロードした画像のフルパスを取得 $post->image_path = Storage::disk('s3')->url($path); } // 保存 $post->save(); // 保存後 一覧ページへリダイレクト return redirect('/'); } public function update(Request $request, $id) { // idを元にレコードを検索して$postに代入 $post = Post::find($id); // editで編集されたデータを$postにそれぞれ代入する $post->text = $request->text; // 保存 $post->save(); // 一覧ページへリダイレクト return redirect('/'); } public function destroy($id) { // idを元にレコードを検索 $post = Post::find($id); // 削除 $post->delete(); // 一覧にリダイレクト return redirect('/'); } }

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

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

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

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

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

Lulucom

2020/04/14 13:26

デフォルトの画像を表示する部分のコードも掲載された方が良いと思います。
Lulucom

2020/04/14 13:38

Laravelなどのバージョンも記載された方が良いと思います。
guest

回答1

0

ベストアンサー

画像表示部分でStorage::url()を使うとどうでしょうか。

php

1<img src="{{ Storage::url('noimage.png') }}" ... >

ファイルURL

(追記)
noimage.pngのパーミッションを変更するとどうでしょうか。 chmod 664 public/storage/noimage.png とかです。

投稿2020/04/14 13:34

編集2020/04/15 01:32
Lulucom

総合スコア1899

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

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

fork_

2020/04/14 13:48

<img src="{{ asset('storage/noimage.png') }}"> としてみましたが、変わらずでした...
Lulucom

2020/04/14 13:53

<img src="{{ Storage::url('noimage.png') }}" ... > だとどうでしょうか。
fork_

2020/04/14 13:54

関係ないかもしれないですが、noimage.pngをローカル上でも使用しているので、競合が起きていると推測しました。他の画像で試してみます。
fork_

2020/04/14 13:55

変わらずでした...お答えいただいたのに、申し訳ありません。
fork_

2020/04/14 14:07

<img src="{{ Storage::url('noimage.png') }}"> としてみましたが、変わらずでした、、、 コントローラー側のコードも載せます。
Lulucom

2020/04/14 14:19

HTMLソースでimgタグのsrcの値を確認すると何かわかりそうでしょうか。
fork_

2020/04/14 14:35

<img src="{{ Storage::url('noimage.png') }}">は、HTMLベースですと、 <img src="/storage/noimage.png">と出ております。 画像は存在しているはずなのですが。。。
Lulucom

2020/04/14 14:36

シンボリックリンクは本当に張れているでしょうか。
Lulucom

2020/04/14 14:50 編集

EC2上でappディレクトリに移動してから `ls -l public/storage/` を実行すると noimage.png は表示されるでしょうか。(追記)appは間違いでした。アプリのトップディレクトリです。
fork_

2020/04/14 14:42 編集

$ php artisan storage:link The [public/storage] directory has been linked. と出ています。 試してみます。
fork_

2020/04/14 14:43

$ ls -l public/storage/ ls: public/storage/ にアクセスできません: そのようなファイルやディレクトリはありません と言われました。存在していないのでしょうか...
Lulucom

2020/04/14 14:44

`ls public/` はどうでしょうか。
fork_

2020/04/14 14:46

appと仰いますと、どの部分のappでしょうか??
fork_

2020/04/14 14:47

[ec2-user@ip-****** app]$ ls public/ noimage.png ありがとうございます。存在しておりました。
Lulucom

2020/04/14 14:47

すみません、appではなくアプリのトップディレクトリでした、間違えていました。
fork_

2020/04/14 14:49

``` bss]$ ls -l public/storage/ 合計 4 -rw------- 1 ec2-user ec2-user 2510 4月 14 06:28 noimage.png ``` 確認できました。
Lulucom

2020/04/14 15:03 編集

すみません、違うかもしれませんね。 noimage.pngのパーミッションを変更するとどうでしょうか。 `chmod 664 public/storage/noimage.png` とかです。
fork_

2020/04/15 01:16

表示できました!! 権限が原因だとは全然考えられませんでした.... 夜遅い時間までお付き合いいただき、ありがとうございました。。。
Lulucom

2020/04/15 01:30 編集

いえいえ、よかったです。私も勉強になりました。回答に追記しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問