通过 chumper/zipper 进行批量下载 文件/图片

网站针对文件下载通常只能实现单文件下载,当我们需要进行文件批量下载的时候,最好的办法就是zip包处理了

Posted by 昆山吴彦祖 on 2019.06.10

这次解决的案子是前端客户可以批量上传图片,1个订单针对N个图片,后台管理员可以针对每个订单进行该订单的图片批量下载,解决方案是:每个订单创建ID同名文件夹,然后进行文件夹zip压缩后进行下载。
案例基于laravel-admin,所以基于laravel-admin部分的非必须


安装chumper/zipper 

composer require chumper/zipper


创建laravel-admin操作类  

namespace App\Admin\Extensions;

use Encore\Admin\Admin;

class Download
{
    protected $id;

    public function __construct($id)
    {
        $this->id = $id;
    }

    protected function script()
    {
        return <<<SCRIPT

$('.grid-check-row').on('click', function () {

    // Your code.
    console.log($(this).data('id'));

});

SCRIPT;
    }

    protected function render()
    {
        Admin::script($this->script());

        return "<a href='/zip/{$this->id}' target='_blank'><i class='fa fa-download'></i></a>";
    }

    public function __toString()
    {
        return $this->render();
    }
}


编辑grid

$grid->actions(function ($actions) {

    // 添加操作
    $actions->append(new Download($actions->getKey()));
});


创建下载文件 download.php并将下载路径指向

use Chumper\Zipper\Zipper;

class Download extends Controller

{
public function index(Request $request,$id)
    {
        //		
		$zipper=new Zipper();
		$zipper->make(public_path("storage/images/$id.zip"))->add(public_path('storage/images/'.$id));
		$zipper->close();
		return response()->download(public_path('storage/images/'.$id.'.zip'));
    }
}


zip laravel_admin