😎
Laravel-Excelで作成したCSVをZIP化してダウンロードする
Laravel-Excelで作成したCSVをZIP化してダウンロードするという機能を実装したかったのでメモに残しておきます。
Laravel-ExcelでCSVを作成するところまでは終わっている想定です。
サンプルコード
Excel::store(new UserExport(), 'exports/csv/users.csv');
$files = glob(storage_path() . '/app/exports/csv/*');
$zipPath = storage_path() . '/app/exports/zip';
if (!file_exists($zipPath)) {
File::makeDirectory($zipPath);
}
$zip = new ZipArchive();
$zip->open($zipPath . 'zipデータ.zip', ZipArchive::CREATE);
foreach ($files as $file) {
$file_info = pathinfo($file);
$file_name = $file_info['filename'] . '.' . $file_info['extension'];
$zip->addFile($file, $file_name);
}
$zip->close();
return response()->download($zipPath . 'zipデータ.zip');
これで storage/app/exports/csv
のフォルダの中にあるファイルを全部、 storage/app/exports/zip/users.zip
に圧縮して保存し、フロントに返すということをしています。
ZIP圧縮のために新しいライブラリを入れる必要がないのがびっくりしました。
結構簡単でしたので、使う機会があれば、またこのサンプルコードを改変して使っていきたいと思います。
Discussion