zn12
@zn12 (a j)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Laravel6】データベースに登録した画像パスを取得し表示したい

解決したいこと

XAMPP環境にてLaravel6でレシピ投稿アプリを作っています。
データベースにある画像パスを取得しview側で表示させたいのですが、画像が表示されません。
シンボリックリンクがうまく作成されていないせいなのか、画像のパスが間違っているのかどちらが原因かわからない状況です。 

発生している問題

「php artisan storage:link」コマンドを実行しましたが、以下のようなメッセージが表示されます。

The system cannot find the path specified.
The [public/storage] directory has been linked.

その後publicファイルを調べましたが、シンボリックリンクが作成されていませんでした。

$ ls -la public
total 22
drwxr-xr-x 1 ×××× □□□□    0 Aug 15 13:23 ./
drwxr-xr-x 1 ×××× □□□□    0 Jul 12 15:09 ../
-rw-r--r-- 1 ×××× □□□□  593 May 12  2021 .htaccess
drwxr-xr-x 1 ×××× □□□□    0 Jul 22 15:20 css/
-rw-r--r-- 1 ×××× □□□□    0 May 12  2021 favicon.ico
drwxr-xr-x 1 ×××× □□□□    0 Aug  1 09:50 images/
-rw-r--r-- 1 ×××× □□□□ 1823 May 12  2021 index.php
drwxr-xr-x 1 ×××× □□□□    0 Jul 27 10:27 js/
-rw-r--r-- 1 ×××× □□□□   24 May 12  2021 robots.txt
-rw-r--r-- 1 ×××× □□□□ 1194 May 12  2021 web.config

画像のパスに関するコード部分は以下になります。

Contoroller(画像投稿部分)

CreateController.php
        $recipe_image = $request->file('product_image');

        if ($recipe_image) {
            $image_path = Storage::disk("public")->putFile('profile', $recipe_image);
            $imagePath = "/storage/" . $image_path;
            $recipe->product_image = $imagePath;
        }
        else {
            $image_path = null;
        }

画像自体は「storage/app/public/profile」に保存されています。

データベース(MySQL)

データベースに登録された画像パス部分です。
スクリーンショット 2022-08-15 140922.png

表示させたいView部分

preview.blade.php

@extends('layout')

@section('content')

<div>
  {{ $recipes->product_image }}
  <img src="{{ asset($recipes->product_image) }} " >
</div>

@endsection

実際にview側で表示されるのは以下画像になります。
(パスが正しいかどうか確かめるため、パスそのものも表示させてあります)
スクリーンショット 2022-08-15 140955.png
データベースにある画像パス、取得してきた画像パスは一致しているのですが、画像が表示されませんでした。

よろしくお願いいたします。

0

1Answer

検索すると同じような事例がありました。

Laravelプロジェクトに/storage/app/publicディレクトリはありますか?
最初からあると思いますが、無ければ復元するなり作成するなりしましょう。

Webからのアクセスを許すには、public/storageからstorage/app/publicへシンボリックリンクを張る必要があります。

1Like

Comments

  1. @zn12

    Questioner

    Laravelプロジェクト名に「!」が入っていたことが原因でした。

    プロジェクト名まで情報を載せておらず申し訳ありませんでした。

    ご回答ありがとうございます。

Your answer might help someone💌