自作のLaravelアプリ内でプライベートチャット機能を作っておりまして、そこにファイルアップロード機能を実装したものの
チャットが過去のものになると目にする機会はほぼなくなる。しかしファイルが溜まるばかり。
というのは良くないなーと思いました。
そこで、Cronで定期的にデータを整理してもらえばいいかな!?と考えたので、その中のファイル操作関連をメモとして残しておきます。
事前準備
use
Storageを使えるようにuseします
use Illuminate\Support\Facades\Storage;
シンボリックリンク
コマンドとしては以下になります。
php artisan storage:link
簡単な説明ですが、次項でリンクを貼る理由を少し書いています。
Storage:: のアクセス先
Storage:: は、デフォルトで storage/app にアクセスします。
getやput でstorage/appディレクトリから読み込み・書き込みを行います。
ただstorage/appは非公開領域なので、前項のシンボリックリンクを貼って、public(公開領域)からアクセスできるようにします。
非公開ディレクトリ(local)か、公開ディレクトリ(public)にアクセスするかは、diskを指定して書き分けます。
Storage::disk(‘public’)->(….) と書くとデフォルトでstorage/app/publicにアクセスし、
Storage::disk(‘local’)->(….) と書くと非公開ディレクトリへのアクセスとなります。
また、繰り返しになりますが Storage:: …はデフォルトがstorage/app(非公開ディレクトリ)なので、
Storage::disk(‘local’)->(….) と
Storage::なんらかのコマンド(….) は同じ意味になります。
Storage:: で操作
今回使ったコマンドしか載せていませんが、参考サイト様ではたくさん掲載されております。
存在確認
Storage::disk('local')->exists('public/file/' . $saved_name )
これで、public/file 以下に $saved_name というファイルがあるか確認できます。
特定ディレクトリ内のファイル全取得
$files = Storage::allFiles('public/file/');
これで、’public/file/’ 以下にあるファイルを全取得できます。
\Log::debug( $files );
でログ出ししてみると、
こんな感じで取得できています!
最終更新日時取得
前項では名前だけじゃなくてファイルの情報も一緒に取得できているので、foreach内で Storage::lastModified を使うと、更新日時なんかも取得できます。
foreach ( $files as $f ) { $up_time = Storage::lastModified($f); echo $up_time //最終更新日時のtimestampが表示される }
特定のファイル削除
Storage::delete($f)
ファイルの削除も同様です。