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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1476閲覧

S3に保存された画像をビューに表示させたい

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/03/23 00:50

前提・実現したいこと

S3に保存された画像をビューで表示できません。(確認済み:AWS S3の方には画像データははいっていました)

恐らくsrcの指定方法が誤っているのではないかと思っています、解決方法がわからない状態です。

以下画像を表示させるために試したルート

<img src="{{ asset('/storage/'.$post->image_file)}}" width="150px">
<img src="{{ $post->image_file }}" width="150px"/>
<img src="{{ $post->path }}"width="150px">
<img src="{{ Storage::disk('s3')->url('/{$image_file public}' )}}" width="150px">

イメージ説明

該当のソースコード

PostsController.php

php

1 2 /** 3 * バリデーション、登録データの整形など 4 */ 5 public function store(PostRequest $request) 6 { 7 $image_file = ""; 8 $upload_image = $request->file('image_file'); 9 10 if ($upload_image) { 11 $path = Storage::disk('s3')->put('/', $upload_image, 'public'); 12 if ($path) { 13 $image = Image::make($upload_image->getRealPath()); 14 $image->path = Storage::disk('s3')->url($path); 15 $image->resize(150, 150); 16 $image->save(); 17 $image_file = $path; 18 } 19 } 20 21 22 23 $post = new Post; 24 $post->subject = $request->subject; 25 $post->message = $request->message; 26 $post->image_file = $image_file; 27 $post->name = ""; 28 $post->user_id = Auth::id(); 29 $post->save(); 30 return redirect('/act')->with('poststatus', '新規投稿しました'); 31 }

index.blade

php

1 <tbody id="tbl"> 2 @foreach ($posts as $post) 3 <tr> 4 <td>{{ optional ($post)->id }}</td> 5 <td>{{ optional ($post->created_at)->format('Y.m.d') }}</td> 6 <td>{{$post->user->name}}</td> 7 <td>{{ optional ($post)->subject }}</td> 8 <td> 9 @if (empty($post->image_file)) 10 11 @else 12 <img src="{{ asset('/storage/'.$post->image_file)}}" width="150px"> 13 <img src="{{ $post->image_file }}" width="150px"/>  14 <img src="{{ $post->path }}"width="150px"> 15 <img src="{{ Storage::disk('s3')->url('/{$image_file public}' )}}" width="150px"> 16 @endif 17 </td>

どなたかご教授いただけるとありがたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

最初に確認するのはブラウザでソースを見て最終的にhtmlとしてどう出力されてるか。
これをやってない人はWebの基本的な開発方法が分かってないのでLaravelの前にもっと学習が必要。

<img src="{{ asset('/storage/'.$post->image_file)}}" width="150px">

S3でこれは確実に間違い。

<img src="{{ $post->image_file }}" width="150px"/> <img src="{{ $post->path }}"width="150px">

$post->image_fileや$post->pathが何を出力しているか書かないと他人からは何も分からない。

<img src="{{ Storage::disk('s3')->url('/{$image_file public}' )}}" width="150px">

PHPの初歩レベルで間違ってる。

$post->image_fileにStorage::disk('s3')->put()のpathを保存しているならおそらくこれが正しい。

<img src="{{ Storage::disk('s3')->url($post->image_file) }}" width="150px">

$pathとして何が返ってきているのか、開発中はこうやってinfo()やdd()で確認する癖を付ける。

php

1$path = Storage::disk('s3')->put('/', $upload_image, 'public'); 2info($path); 3dd($path);

store()内も間違いが多い。
Imageで加工するなら先に加工してからS3に保存。

投稿2021/03/23 01:29

kawax

総合スコア10377

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問