@Shou_ (しょう)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PHP/laravel S3に保存した画像を表示させることについての質問

laravelについてご質問です。

S3で画像を保存して、表示したいのですが、以下のようなエラーが出てしまいまして、そのエラーの意味がよくわからかくて先に進めないです。

提示していただきたい箇所がございましたら、おっしゃって頂くようお願い申し上げ
ます。
スクリーンショット 2020-09-07 17.24.33.png

スクリーンショット 2020-09-07 17.37.40.png

なにか解決策を頂けたら嬉しいです。

画像を表示させたい箇所です。(こちらがエラーになっております)

使用環境: Laravel framework 6.18.24

form.blade.php
@if (count($boards) > 0)
    <ul class="list-unstyled"  style="background:#D9E5FF;">
        @foreach ($boards as $board)

 //エラーの部分
       <img src="{{ Storage::disk('s3')->url($board->image) }}" style="width:70px; height:70px;">



        @endforeach
    </ul>
    {{-- ページネーションのリンク --}}
    {{ $boards->links() }}
@endif


画像を選択する箇所です

board.blade.php
   <form method="POST" action="{{route('boards.store')}}" enctype="multipart/form-data">
                @csrf




            <div class="form-image">
                <input type="file" name="image"  id="img">
            </div>


コントローラー@storeです

php:boardsController.php
public function store(Request $request)
    {
        // バリデーション
        $request->validate([
            'content' => 'required|max:255',
        ]);

        $file = $request->file('image');

        $file_path= 'images';

        // S3に接続
        $path = Storage::disk('s3')->putFile($file_path, $file, 'public');


        // 認証済みユーザ(閲覧者)の投稿として作成(リクエストされた値をもとに作成)
        $request->user()->boards()->create([
            'content' => $request->content,
            'image' => $path,

        ]);

        // 前のURLへリダイレクトさせる
        return back();
    }


0 likes

1Answer

保存は成功しているのですか?

画像を表示しようとするときの $board->image が空なのだと思います。

public stringgetObjectUrl( string $bucket, string $key, mixed $expires = null, array $args = array() )

の$keyが空なので例えば

$image_url = $client->getObjectUrl($bucket, 'sample.png');

とくるところが以下のようになっているんだと思います。

$image_url = $client->getObjectUrl($bucket, '');
1Like

Comments

  1. @Shou_

    Questioner

    ご回答ありがとうございます。 画像は保存されていないです。 

    その空の部分を埋めるにはcontrollerのコードを変更すればよろしいでしょうか?

  2. @Shou_

    Questioner

    了解しました! 参考にさせていただきます。お忙しい中ありがとうございます。

Your answer might help someone💌