사용자가 여러 파일 다운로드를 지원해야 하는 경우 가장 좋은 방법은 압축된 패키지를 생성하여 다운로드용으로 제공하는 것입니다. Laravel의 구현을 살펴보세요.
사실 이것은 Laravel에 관한 것이 아니라 PHP와 더 관련이 있습니다. PHP 5.2부터 존재했던 ZipArchive 클래스를 사용하려면 ext-zip을 확인해야 합니다. php.ini 확장 기능이 활성화되었습니다.
작업 1: 사용자의 송장 파일을 storage/invoices/aaa001.pdf
코드 표시는 다음과 같습니다.$zip_file = 'invoices.zip'; // 要下载的压缩包的名称 // 初始化 PHP 类 $zip = new \ZipArchive(); $zip->open($zip_file, \ZipArchive::CREATE | \ZipArchive::OVERWRITE); $invoice_file = 'invoices/aaa001.pdf'; // 添加文件:第二个参数是待压缩文件在压缩包中的路径 // 所以,它将在 ZIP 中创建另一个名为 "storage/" 的路径,并把文件放入目录。 $zip->addFile(storage_path($invoice_file), $invoice_file); $zip->close(); // 我们将会在文件下载后立刻把文件返回原样 return response()->download($zip_file);
로그인 후 복사
작업 2: 모든 파일을 storage/invoices 디렉토리로 압축합니다.
Laravel 측에서는 변경할 필요가 없습니다. 파일을 반복하려면 간단한 PHP 코드를 추가하기만 하면 됩니다.$zip_file = 'invoices.zip'; $zip = new \ZipArchive(); $zip->open($zip_file, \ZipArchive::CREATE | \ZipArchive::OVERWRITE); $path = storage_path('invoices'); $files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path)); foreach ($files as $name => $file) { // 我们要跳过所有子目录 if (!$file->isDir()) { $filePath = $file->getRealPath(); // 用 substr/strlen 获取文件扩展名 $relativePath = 'invoices/' . substr($filePath, strlen($path) + 1); $zip->addFile($filePath, $relativePath); } } $zip->close(); return response()->download($zip_file);
로그인 후 복사