这次解决的案子是前端客户可以批量上传图片,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