やりたいこと
Laravelにおいて、イメージファイル(画像ファイル)を保存したい。
保存場所を知りたい。
保存した画像はWebで公開する。
参考にしたサイト
わかりやすい。助かりました。
ここだけ見たら当記事タイトルに書いた目的達成できるはず。
- 画像のアップロードフォーム設置
- 画像PathをDBへ保存する
まで記載されている。
今後参考にすると思う。
保存場所
保存場所は2パターンある。
- public/ 配下
- storage/ 配下
後者のstorage配下にするのが良い模様。
public/ 配下ではなく、 storage/ 配下に保存するメリット
メリットは以下3点らしい。
- ファイルの安全性が高まる
publicディレクトリに直接保存する場合、URLを知っている第三者がアクセスできる可能性がありますが、storageディレクトリに保存することで、アプリケーション内からしかアクセスできないようにできます。これにより、ファイルの安全性が高まります。 -
バックアップが容易になる
storageディレクトリに保存されたファイルは、バックアップを取りやすくなります。publicディレクトリに保存されたファイルは、Webサーバーから直接アクセスできるため、バックアップを取ることが難しい場合があります。 -
ファイルの管理が容易になる
storageディレクトリは、アプリケーションのファイル保存用のディレクトリとして、デフォルトで用意されているため、ファイルの管理が容易になります。publicディレクトリに画像ファイルを保存する場合、専用のディレクトリを作成する必要がありますが、storageディレクトリを利用することで、ファイルの保存場所を明確にすることができます。
storage/ への保存方法
Laravelのデフォルトの設定であれば以下のとおり。
1. storage のシンボリックリンクを publicに張る
以下のコマンドで、storage のシンボリックリンクを publicに張る
php artisan storage:link
さすれば、public/ 直下に以下のようにシンボリックリンクが張られる。
storage -> /ららべるディレクトリ/storage/app/public
なお、この設定をいじりたい場合(シンボリックのPathを変えたい場合)、
config/filesystem.php
の以下の設定をいじる。
'links' => [
public_path('storage') => storage_path('app/public'),
],
2. 画像ファイルを配置する
storage/app/public/ 直下へ画像ファイルを配置する。
3. viewから参照する
bladeからimgタグで参照する場合は以下のように記述します。
<img src="{{asset('storage/sample.jpg')}}">
[R]
public/ への保存方法
先述したとおり、public/ 配下ではなく、storage/ 配下に保存したほうが良い。
だが、public/ 配下へも保存できる。
これは単純に public/ 直下に画像ファイルを保存すれば良いだけ。
public/example.png
は、
https://example.com/example.png
で参照できる。
コメント