目的
-
Storage::get()
の振る舞いについて若干詰まったので簡単にまとめておく
Storageファサードの振る舞い
- そもそもStorageファサードは
disc()
メソッドや.envで指定しない限りconfig/filesystems.php
の'default'
で指定されたドライバを参照しにいく。-
ここで言うドライバとはローカルとかS3とかの記憶する「場所」の話である。
-
完全にデフォルトの場合下記のように記載されてlaravelプロダクトのローカルを参照するようになっている。
config/filesystems.php/* |-------------------------------------------------------------------------- | Default Filesystem Disk |-------------------------------------------------------------------------- | | Here you may specify the default filesystem disk that should be used | by the framework. The "local" disk, as well as a variety of cloud | based disks are available to your application. Just store away! | */ 'default' => env('FILESYSTEM_DRIVER', 'local'),
-
下記の様に.envに記載されている 場合、ドライバはs3が指定されている。
.envFILESYSTEM_DRIVER=s3
-
この場合Storageファサードを使った処理は
disk()
メソッドで指定しない限りs3を参照して実行される。
-
- なので「殆どのファイルはs3に上げたいけど、ローカルでzipファイルに固めてダウンロードしたい」などのケースでzipをダウンロードする場合下記のように記載する。
-
Storage::download()
を用いる場合(あくまでダウンロード処理の例のみ記載、コチラだけを記載してもzipで固めてダウンロードしてくれない)Storage::disk('local')->download('ファイルパス', 'ファイル名', 'ヘッダー');
-
response()
を用いる場合response()->download('ファイルパス', 'ファイル名', 'ヘッダー'); // ダウンロード後のファイルを削除してほしい場合、deleteFileAfterSend(true)を呼ぶ response()->download('ファイルパス', 'ファイル名', 'ヘッダー')->deleteFileAfterSend(true);
-