Maison >cadre php >Laravel >Comment créer un fichier Zip et le télécharger dans Laravel ? (Exemple de code ci-joint)

Comment créer un fichier Zip et le télécharger dans Laravel ? (Exemple de code ci-joint)

藏色散人
藏色散人avant
2021-10-14 16:10:461879parcourir

La colonne tutorielle suivante de Laravel vous présentera la création de fichiers compressés Zip dans Laravel et fournira des méthodes de téléchargement. J'espère qu'elle sera utile à tout le monde !

Créez des fichiers compressés Zip dans Laravel et fournissez-les en téléchargement

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer