[Laavel] ZIP로 여러 파일 다운로드

7727 단어 LaravelPHPtech

사용할 라이브러리


stechstudio/laravel-zipstream
이 프로그램 라이브러리는 ZIP 파일을 만들고 완성된 곳에서 동시에 흐르는 전송 형식으로 다운로드하여 메모리와 CPU의 소모를 억제할 수 있다.
"maennchen/ZipStream-PHP"라이브러리는 라벨이 편리하게 사용할 수 있도록 만들어진 것으로 보인다.

사용법


$ composer require stechstudio/laravel-zipstream
$ composer install
이후 다음과 같이use를 발표하고 사용하면 간단하게 실현할 수 있다.
use STS\ZipStream\ZipStreamFacade AS Zip;

class ZipController {

    public function build()
    {
        return Zip::create("package.zip", [
            "/path/to/Some File.pdf",
            "/path/to/Export.xlsx"       
        ]);
    }
}

샘플


use STS\ZipStream\ZipStreamFacade AS Zip;

class ZipController
{
    public function build()
    {
        // 対象File取得
        $files = File::get();

        $filePaths = [];

        // ZIP化するにあたりダウンロードさせたいファイルのフルパスが必要な為、配列で作成
        $download_dir = '/work/application/storage/app/test'

        foreach($files as $file) {
            $filePaths[] = $downloads_dir.'/'.$file->getName(); // ファイル名を取得してフルパスを作成
        }

        // 完成時のzipファイルの名前
        $zipname = 'download.zip';

        // zipファイルを指定ディレクトリに作成
        Zip::create($zipname, $filePaths)
                 ->saveTo($download_dir . '/zip');

        $fullpath = $download_dir . '/zip/' . $zipname;

        // 作成されたzipファイルをダウンロードしてディレクトリから削除
        return response()->download($fullpath, basename($fullpath), [])->deleteFileAfterSend(true);
    }
}
샘플은 디렉터리 등에서 직접 썼지만 실제로는 config 파일과 env 파일을 참조하는 형식이 좋다.

선전하다.


개인 링크 엔지니어 모집 중!
https://www.person-link.co.jp/recruit

좋은 웹페이지 즐겨찾기