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

发布时间 - 2021-10-14 00:00:00    点击率:

下面由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  # 压缩文件  # 压缩包  # 您的  # 最好的  # 将在  # 不需要  # 你看  # 会在  # 第二个  # 这不是 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  WEB开发之注册页面验证码倒计时代码的实现  黑客入侵网站服务器的常见手法有哪些?  JavaScript常见的五种数组去重的方式  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  香港服务器部署网站为何提示未备案?  魔方云NAT建站如何实现端口转发?  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  如何在万网主机上快速搭建网站?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  js实现点击每个li节点,都弹出其文本值及修改  Laravel如何使用Sanctum进行API认证?(SPA实战)  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  教你用AI将一段旋律扩展成一首完整的曲子  JavaScript如何操作视频_媒体API怎么控制播放  打造顶配客厅影院,这份100寸电视推荐名单请查收  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  在线制作视频的网站有哪些,电脑如何制作视频短片?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  如何实现建站之星域名转发设置?  制作企业网站建设方案,怎样建设一个公司网站?  如何在阿里云虚拟服务器快速搭建网站?  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  如何快速打造个性化非模板自助建站?  Laravel如何使用Service Container和依赖注入?(代码示例)  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  java中使用zxing批量生成二维码立牌  如何登录建站主机?访问步骤全解析  Laravel安装步骤详细教程_Laravel环境搭建指南  Laravel怎么在Blade中安全地输出原始HTML内容  如何快速生成凡客建站的专业级图册?  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  如何生成腾讯云建站专用兑换码?  百度浏览器如何管理插件 百度浏览器插件管理方法  黑客如何利用漏洞与弱口令入侵网站服务器?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  免费视频制作网站,更新又快又好的免费电影网站?  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  js代码实现下拉菜单【推荐】  nodejs redis 发布订阅机制封装实现方法及实例代码  如何挑选高效建站主机与优质域名?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何快速生成专业多端适配建站电话?  如何快速搭建高效WAP手机网站吸引移动用户?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署