laravel实现多文件一次性下载

场景
在项目开发过程中,有时需要一次性下载多个文件,实现思路:可以把多个文件上传到一个目录中,下载时将文件夹的多个文件压缩成zip包,下载zip包。

用laravel实现多文件一次性下载

实现代码如下:

// 需要开通zip扩展
if(class_exists('ZipArchive')) {
    $dir = "uploads";
    if($dir){
        $path = public_path($dir);
        $zip_name = public_path('files.zip');
        $zip = null;
        $count = 0;
        //迭代器
        $files =  new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path));
        foreach ($files as $name => $file){
            //排除文件夹
            if (!$file->isDir()) {
                //是否实例化了ZipArchive对象,
                if(!$zip) {
                    $zip = new \ZipArchive();
                    //打开zip包
                    $zip->open($zip_name, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
                }
                //获取文件的绝对路径
                $filePath = $file->getRealPath();
                //把文件添加的zip包中
                $zip->addFile($filePath, $file->getFilename());
                $count++;
            }
        }
        if($zip){
            //关闭zip包
            $zip->close();
        }
        if($count){
            return response()->download($zip_name);
        }else{
            return response('', 404);
        }
    }else{
        return response('', 404);
    }
}else{
    return response('', 404);
}

出处:www.l1mn.com

原文标题:laravel实现多文件一次性下载

原文地址:https://www.l1mn.com/p/4361x2.html

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

分类:php文件处理
评论

aa回复

2023年09月16日 23:52

学到了,谢谢作者分享

皖ICP备2023023451号

Copyright © L1MN.COM 联系方式:l1mnfw@163.com