😎

Laravel-Excelで作成したCSVをZIP化してダウンロードする

2021/11/10に公開

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