質問させてください。
今 Laravel で画像アップロード掲示板を作っていまして、画像自体はアップロードできたのですが、それを View で表示できなくて困っております。
前提・実現したいこと
Laravel でアップロードした画像を https://〇〇〇.com/storage/xxx.jpg
のパスで表示させたいです。
発生している問題
少しややこしい話になるのですが、順番に説明させていただきます。
まず、さくらレンタルサーバーで myapp というフォルダに Laravel をインストールしました。
このままだと、View の index.blade.php
を表示するための URL が https://〇〇〇.com/myapp/public/
になってしまうため、ドキュメントルートを変更する必要があり、こちらのサイトを参考に、public フォルダの中身を全部ルートに移動させました。
これで https://〇〇〇.com/
にアクセスすればトップページが表示されるようになりました。
なので今本番環境のディレクトリ構成は下のようになっています。
root/ ├ myapp/ ← Laravelをインストール │ ├ public/ │ │ └ storage/ ← ★シンボリックリンク │ └ storage/ │ └ app/ │ └ public/ │ └ xxx.jpg ← ★ここに画像がアップロードされている ├ web.config ← public から移動 ├ .htaccess ← public から移動 ├ favicon.ico ← public から移動 ├ index.php ← public から移動 └ robots.txt ← public から移動
次に Controller の storeAs()
メソッドで画像を storage/app/public
にアップしました。
ここからが本題なのですが、こちらのサイトに「Laravelの画像の置き場所の推奨は、public/images
配下に直接ファイルを置くのではなく、storage/app/public
配下に置き、public/storage
から storage/app/public
にシンボリックリンクを貼り、そちらにアクセスすることを推奨」とあるため、
php artisan storage:link
でシンボリックリンクを作成しました。
そうすると、public フォルダの中に storage
というシンボリックリンクができるのですが、public フォルダの中身を全部ルートへ移動してしまっているために、シンボリックリンクにアクセスできず困っております。
vagrant の仮想環境でテストするときは php artisan serve --host 192.168.33.10 --port 8000
でサーバーを立ち上げていたため、public の中身を移動させる必要がなく、http://192.168.33.10:8000/storage/xxx.jpg
でシンボリックリンクにアクセスして画像を表示できていました。
試したこと
今画像は /myapp/storage/app/public/
フォルダの中にあるので、そのまま https://〇〇〇.com/myapp/storage/app/public/xxx.jpg
でブラウザに表示されるのですが、これだと推奨されないやり方だと思うので良くなさそうです。
config/filesystems.php
をいじれば解決する気がするのですが、Laravelに詳しくなくどこから触っていいかよく分かりません・・・
説明がややこしくて申し訳ありません。
どなたか詳しい方がいらっしゃいましたら、ご教授いただけますと助かります。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
開発環境は以下になります。
・vagrant(テスト用)
・さくらレンタルサーバー(本番用)
・Laravel 5.8
・php 7.3
回答1件
あなたの回答
tips
プレビュー