Si vous avez besoin que vos utilisateurs prennent en charge plusieurs téléchargements de fichiers, le meilleur moyen est de créer un package compressé et de le fournir en téléchargement. Jetez un œil à l’implémentation dans Laravel.
En fait, il ne s'agit pas de Laravel, mais plutôt de PHP. Nous allons utiliser la classe ZipArchive qui existe depuis PHP 5.2. Si vous souhaitez l'utiliser, vous devez vous assurer que ext-zip est présent dans . php.ini Extension activée.
Tâche 1 : Stocker le fichier de facture de l'utilisateur dans storage/invoices/aaa001.pdf
Voici l'affichage du code :
$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);
L'exemple est simple, non ?
Tâche 2 : Compresser tous les fichiers dans le répertoire storage/invoices
Aucune modification n'est requise du côté de Laravel, il nous suffit d'ajouter du code PHP simple pour parcourir les fichiers.
$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);
C'est fondamentalement terminé. Vous voyez, vous n'avez besoin d'aucune extension Laravel pour implémenter cette méthode de compression.
Article réimprimé de : https://learnku.com/laravel/t/26087