PHP
laravel

[問題記録]画像をアップロードする際に元の画像を削除する

ユーザーのプロフィール画像をアップロードするロジックです。

1.問題点:

画像をアップロード、または更新する際に、元の画像はストレージに残ってしまう。

if($request->file('avatar')){

            $path=$request->file('avatar')->storePublicly($user->id);
            $user->avatar=asset('/storage').'/'.$path;
        }

        $user->save();

2.要件:

新しい画像をアップロードする際に、元の画像を削除する

if($request->file('avatar')){
            $files = Storage::allfiles($user->id);
            Storage::delete($files);
            $path=$request->file('avatar')->storePublicly($user->id);
            $user->avatar=asset('/storage').'/'.$path;

        }
        $user->save();

参考資料:Laravel5.4ファイルストレージ

APPENDIX:

問題:404で画像はアクセスできない!!

解決策:

1.シンボリックリンクを張ること。

php artisan storage:link

publicディスクは一般公開へのアクセスを許すファイルを意味しています。デフォルトのpublicディスクは、localドライバを使用しており、storage/app/public下に存在しているファイルです。Webからのアクセスを許すには、public/storageからstorage/app/publicへシンボリックリンクを張る必要があります。この手法により、公開ファイルを一つのディレクトリへ留め、Envoyerのようなリリース時のダウンタイムが起きない開発システムを使っている場合、各リリース間でファイルを簡単に共有できます。

2.storageの訪問権限

# chmod -R 707 bootstrap/cache
# chmod -R 707 storage

3.画像のurlは間違っているのか?
絶対パス・相対パスをチェック。
データベースの中のデータを取り出してみる。