Jika anda memerlukan pengguna anda untuk menyokong muat turun berbilang fail, cara terbaik ialah mencipta pakej fail zip dan tersedia untuk dimuat turun. Lihatlah pelaksanaan dalam Laravel.
Sebenarnya, ini bukan tentang Laravel, tetapi lebih berkaitan dengan PHP Kami akan menggunakan kelas ZipArchive yang telah wujud sejak PHP 5.2 Jika anda ingin menggunakannya, anda perlu memastikan php.iniext-zip dalam 🎜> didayakan.
Tugas 1: Simpan fail invois pengguna ke storage/invois/aaa001.pdf
Berikut ialah paparan kod:
$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);
Tugas 2: Mampatkan semua fail ke direktori storan/invois
Tiada perubahan diperlukan dalam Laravel We hanya perlu menambah beberapa kod PHP mudah untuk mengulangi fail ini.$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);