tp5 fastadmin列表页图片批量压缩并下载

记录:tp5 fastadmin对列表页选中数据的多张图片进行压缩并下载。

在这里插入图片描述
html代码

<a href="javascript:;" class="btn btn-info btn-apple btn-disabled disabled {:$auth->check('zhuanli/zhuanli/xiazai')?'':'hide'}" title="批量下载专利证书"><i class="fa fa-check"></i> 批量下载专利证书</a>

js代码
在这里插入图片描述

define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {var Controller = {index: function () {// 初始化表格参数配置Table.api.init({extend: {index_url: 'zhuanli/zhuanli/index' + location.search,add_url: 'zhuanli/zhuanli/add',edit_url: 'zhuanli/zhuanli/edit',del_url: 'zhuanli/zhuanli/del',multi_url: 'zhuanli/zhuanli/multi',import_url: 'zhuanli/zhuanli/import',table: 'zhuanli',}});var table = $("#table");// 初始化表格table.bootstrapTable({url: $.fn.bootstrapTable.defaults.extend.index_url,pk: 'id',sortName: 'id',fixedColumns: true,fixedRightNumber: 1,search:false,columns: [[{checkbox: true, rowspan: 2},// {field: 'id', title: __('Id'), rowspan: 2},{field: 'xuhao', title: __('Xuhao'), rowspan: 2},{field: 'zhuanlicategory.name', title: __('Zhuanlicategory.name'), operate: 'LIKE', rowspan: 2},{field: 'title', title: __('Title'), operate: 'LIKE', rowspan: 2},{field: 'shenqinghao', title: __('Shenqinghao'), operate: 'LIKE', rowspan: 2},{field: 'shenqingdate', title: __('Shenqingdate'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, rowspan: 2},{field: 'gongkaidate', title: __('Gongkaidate'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, rowspan: 2},{field: 'shouquandate', title: __('Shouquandate'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, rowspan: 2},{field: 'zhuanliquanren', title: __('Zhuanliquanren'), operate: 'LIKE', rowspan: 2},{field: 'famingren', title: __('Famingren'), operate: 'LIKE', rowspan: 2},{field: 'zhuanlizhengshu', title: __('Zhuanlizhengshu'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images, rowspan: 2},{field: 'shoulitongzhishu', title: __('Shoulitongzhishu'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images, rowspan: 2},{field: 'bandengtongzhishu', title: __('Bandengtongzhishu'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images, rowspan: 2},{field: 'images', title: __('Images'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images, rowspan: 2},{field: 'qita', title: __('Qita'), operate: 'LIKE', rowspan: 2},{field: 'status', title: __('Status'), searchList: {"normal":__('Normal'),"hidden":__('Hidden')}, formatter: Table.api.formatter.status, rowspan: 2},                        {field: 'nianfei', title: __('年费收据'), operate: false, colspan:20},// {field: 'createtime', title: __('Createtime')},// {field: 'updatetime', title: __('Updatetime')},{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate, rowspan: 2}],[{field: 'images1', title: __('Images1'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images2', title: __('Images2'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images3', title: __('Images3'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images4', title: __('Images4'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images5', title: __('Images5'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images6', title: __('Images6'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images7', title: __('Images7'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images8', title: __('Images8'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images9', title: __('Images9'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images10', title: __('Images10'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images11', title: __('Images11'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images12', title: __('Images12'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images13', title: __('Images13'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images14', title: __('Images14'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images15', title: __('Images15'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images16', title: __('Images16'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images17', title: __('Images17'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images18', title: __('Images18'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images19', title: __('Images19'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},{field: 'images20', title: __('Images20'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},]]});// 为表格绑定事件Table.api.bindevent(table);table.on('load-success.bs.table', function (data) {$(".btn-editone").data("area", ["100%", "100%"]);$(".btn-add").data("area", ["100%", "100%"]);});// 批量下载专利证书$(document).on("click", ".btn-apple", function () {var ids = Table.api.selectedids(table);//获取选中列的idif(ids.length==0){layer.alert("请选择要操作的数据");return false;}window.open("zhuanli/xiazai?ids="+ids.join(','));})},add: function () {Controller.api.bindevent();},edit: function () {Controller.api.bindevent();},api: {bindevent: function () {Form.api.bindevent($("form[role=form]"));}}};return Controller;
});

后端代码

/*** 批量下载专利证书*/public function xiazai() {$ids = $this->request->get("ids");if (!$ids) {$this->error('请选择需要下载专利证书的数据');}//要打包的文件$files = [];foreach (explode(',', $ids) as $k => $v){$zhuanlizhengshu = explode(',', $this->model->where('id',$v)->value('zhuanlizhengshu'));$files = array_merge($files, $zhuanlizhengshu);}$zip = new \ZipArchive;//压缩文件名$filename = 'uploads/zhuanlizhengshu/'.date('YmdHis').'.zip';// 使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释if ($zip->open ($filename ,\ZipArchive::OVERWRITE) !== true) {//OVERWRITE 参数会覆写压缩包的文件 文件必须已经存在if($zip->open ($filename ,\ZipArchive::CREATE) !== true){// 文件不存在则生成一个新的文件 用CREATE打开文件会追加内容至zipecho '无法打开文件,或者文件创建失败';exit;}}//循环压缩文件foreach($files as $key => $value){// $zip->addEmptyDir("attach");$file = ROOT_PATH.'public'.$value;if(file_exists($file)){$zip->addFile($file, basename($file));} else {echo '检测到有文件不存在';exit;}}// 关闭$zip->close();//打包下载zipheader("Cache-Control:max-age=0");header("Content-Description: File Transfer");header("Content-disposition: attachment; filename=".basename($filename));//文件名header("Content-Type:application/zip"); //格式为zipheader("Content-Transfer-Encoding:binary"); //这是二进制文件header("Content-Length:".filesize($filename)); //文件大小@readfile($filename);exit;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1559060.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

selenium-Alert类用于操作提示框/确认弹框(4)

之前文章我们提到&#xff0c;在webdriver.WebDriver类有一个switch_to方法&#xff0c;通过switch_to.alert()可以返回Alert对象&#xff0c;而Alert对象主要用于网页中弹出的提示框/确认框/文本输入框的确认或者取消等动作。 Alert介绍 当在页面定位到提示框/确认框/文本录入…

如何通过systemed实现Linux脚本在服务器的开机自启动,解决网络摄像机IPC通过 域名接入视频监控平台出现离线的问题。

目录 一.问题描述和分析 二.实现脚本开机自启动的过程 2.1确认该系统是不是systemed系统 2.2创建并配置该脚本的systemd服务 2.2.1创建服务 2.2.2配置服务 2.3启动服务 三.问题解决结果 3.1查看服务状态 3.2查看摄像机在线状态 3.3查看视频是否正常 一.问题描述和分…

leetcode:反转字符串中的单词III

题目链接 string reverse(string s1) {string s2;string::reverse_iterator rit s1.rbegin();while (rit ! s1.rend()){s2 *rit;rit;}return s2; } class Solution { public:string reverseWords(string s) {string s1; int i 0; int j 0; int length s.length(); for (i …

C++关于树的基础知识

首先区分概念 “度为m的树”指的是至少有一个结点的度是m&#xff0c;一定是非空树 “m叉树”指的是允许所有的结点都小于m&#xff0c;且可以是空树 常见考点&#xff1a; 度为m的树的第i层最多有个结点 &#xff08;对于m叉树也相同&#xff09; 第一层m的0次方 第二层m的…

电池大师 2.3.9 | 专业电池管理,延长寿命优化性能

Battery Guru 显示电池使用情况信息&#xff0c;测量电池容量&#xff08;mAh&#xff09;&#xff0c;并通过有用技巧帮助用户改变充电习惯&#xff0c;延长电池寿命。支持显示电池健康状况&#xff0c;优化电池性能。 大小&#xff1a;9.6M 百度网盘&#xff1a;https://pan…

多模态大语言模型(MLLM)-InstructBlip深度解读

前言 InstructBlip可以理解为Blip2的升级版&#xff0c;重点加强了图文对话的能力。 模型结构和Blip2没差别&#xff0c;主要在数据集收集、数据集配比、指令微调等方面下文章。 创新点 数据集收集&#xff1a; 将26个公开数据集转换为指令微调格式&#xff0c;并将它们归类…

创建osd加入集群

故障原因&#xff1a;ceph节点一个磁盘损坏&#xff0c;其中osd69 down了&#xff0c;需要更换磁盘并重新创建osd加入ceph集群。 信息采集&#xff1a; 更换磁盘前&#xff0c;查询osd69对应的盘符&#xff1a; 将对应的故障磁盘更换后&#xff0c;并重做raid&#xff0c;然后查…

≌图概念凸显有长度不同的射线

黄小宁 【摘要】自有射线概念后的2300年里一直无人能知有长度不同的射线、无人能知有互不≌的射线&#xff0c;从而使数学一直有几何“常识”&#xff1a;任何射线都没有长度差别。保距变换和≌图概念使人能一下子看到有长度不同的射线。 变量x所取各数也均由x代表&#xff0c…

1. Keepalived概念和作用

1.keepalived概念 (1)解决单点故障(组件免费) (2)可以实现高可用HA机制 (3)基于VRR协议(虚拟路由沉余协议) 2.keepalived双机主备原理

DockerCompose 启动 open-match

背景介绍 open-match是Google和unity联合开源的支持实时多人匹配的框架&#xff0c;已有多家游戏厂商在生产环境使用&#xff0c;官网 https://open-match.dev/site/ 。原本我们使用的是UOS上提供的匹配能力&#xff0c;但是UOS目前不支持自建的Dedicated servers 集群&#x…

ai论文写作软件哪个好?分享5款ai论文题目生成器

在当前的学术研究和写作领域&#xff0c;AI论文写作软件已经成为提高效率和质量的重要工具。根据多个来源的评测和推荐&#xff0c;以下是五款值得推荐的AI论文写作软件&#xff0c;其中特别推荐千笔-AIPassPaper。 1. 千笔-AIPassPaper 千笔-AIPassPaper是一款基于深度学习和…

【第2章 开始学习C++】C++语句

文章目录 导语声明语句和变量赋值语句cout的新花样使用cin类简介 导语 C 程序是一组函数&#xff0c; 而每个函数又是一组语句。 C 有好几种语句&#xff0c;例如&#xff1a;声明语句创建变量&#xff0c; 赋值语句给该变量提供一个值。 声明语句和变量 计算机是一种精确的…

HCIA——one

推荐电影&#xff1a;《模仿游戏》《黑客帝国》《头号玩家》 图灵机每秒五千次计算&#xff0c;当今计算机4080ti算力每秒21万亿次的计算。 OSI七层模型 应用层&#xff1a;人机交互&#xff0c;将抽象语言转换成编码 表示层&#xff1a;将编码转换成二进制 介质访问控制层…

Chatgpt 原理解构

一、背景知识 1. 自然语言处理的发展历程 自然语言处理在不同时期呈现出不同的特点和发展态势。萌芽期&#xff0c;艾伦・图灵在 1936 年提出 “图灵机” 概念&#xff0c;为计算机诞生奠定基础&#xff0c;1950 年他提出著名的 “图灵测试”&#xff0c;预见了计算机处理自然…

国内经典多模态大模型工作1——Qwen-VL系列(Qwen-VL、Qwen2-VL解读)

Qwen-VL 论文标题&#xff1a;《Qwen-VL: A Versatile Vision-Language Model for Understanding, Localization, Text Reading, and Beyond》 论文链接&#xff1a;https://arxiv.org/pdf/2308.12966.pdf 项目&#xff1a;https://github.com/QwenLM/Qwen-VL/tree/master 模…

DAMA数据管理知识体系(第13章 数据质量)

课本内容 13.1 引言 语境图 图13-1 语境关系图&#xff1a;数据质量业务驱动因素 1&#xff09;提高组织数据价值和数据利用的机会。2&#xff09;降低低质量数据导致的风险和成本。3&#xff09;提高组织效率和生产力。4&#xff09;保护和提高组织的声誉。 提机会、降成本、增…

3D看车如何实现?有哪些功能特点和优势?

3D看车是一种创新的汽车展示方式&#xff0c;它利用三维建模和虚拟现实技术&#xff0c;将汽车以更真实、更立体的形式呈现在消费者面前。 一、3D看车的实现方式 1、三维建模&#xff1a; 通过三维建模技术&#xff0c;按照1:1的比例还原汽车外观&#xff0c;包括车身线条、细…

yolov8/9/10/11模型在中医舌苔分类识别中的应用【代码+数据集+python环境+GUI系统】

yolov8、9、10、11模型在中医舌苔分类识别中的应用【代码数据集python环境GUI系统】 背景意义 目前随着人们生活水平的不断提高&#xff0c;对于中医主张的理念越来越认可&#xff0c;对中医的需求也越来越多。 传统中医的舌诊主要依赖于医生的肉眼观察&#xff0c;仅仅通过这…

大数据新视界 --大数据大厂之 GraphQL 在大数据查询中的创新应用:优化数据获取效率

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

《Programming from the Ground Up》阅读笔记:p181-p216

《Programming from the Ground Up》学习第10天&#xff0c;p181-p216总结&#xff0c;总计34页。 一、技术总结 第10章主要讲计算机是如何计算的&#xff0c;如十进制、二进制、八进制、十六进制以及浮点数和负数的表示。属于比较基础的内容&#xff0c;如果有一定基础&…