• 技术文章 >php框架 >Laravel

    Laravel怎么创建Zip文件并实现下载?(附代码实例)

    藏色散人藏色散人2021-10-14 16:10:46转载145
    下面由Laravel教程栏目带大家介绍Laravel 中创建 Zip 压缩文件并提供下载方法,希望对大家有所帮助!

    Laravel 中创建 Zip 压缩文件并提供下载

    如果您需要您的用户支持多文件下载的话,最好的办法是创建一个压缩包并提供下载。看下在 Laravel 中的实现。

    事实上,这不是关于 Laravel 的,而是和 PHP 的关联更多,我们准备使用从 PHP 5.2 以来就存在的 ZipArchive 类 ,如果要使用,需要确保php.ini 中的 ext-zip 扩展开启。

    任务 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);

    到这里基本就算完成了。你看,你不需要任何 Laravel 的扩展包来实现这个压缩方式。

    文章转自:https://learnku.com/laravel/t/26087

    以上就是Laravel怎么创建Zip文件并实现下载?(附代码实例)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:Laravel
    上一篇:Laravel8出新功能啦!通过禁用延迟来定位N+1问题 下一篇:教你在laravel中如何使用elaticsearch(步骤分明)
    线上培训班

    相关文章推荐

    • laravel怎么验证请求方式• 10个优质的用来搭建 Laravel 应用的包(分享)• 通过实例来了解Laravel中管道的使用方法• Laravel8出新功能啦!通过禁用延迟来定位N+1问题

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网