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

news2024/11/21 1:26:49
记录: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);//获取选中列的id
                if(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打开文件会追加内容至zip
                echo '无法打开文件,或者文件创建失败';
                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();

        //打包下载zip
        header("Cache-Control:max-age=0");
        header("Content-Description: File Transfer");
        header("Content-disposition: attachment; filename=".basename($filename));//文件名
        header("Content-Type:application/zip"); //格式为zip
        header("Content-Transfer-Encoding:binary"); //这是二进制文件
        header("Content-Length:".filesize($filename)); //文件大小
        @readfile($filename);

        exit;
    }

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

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

相关文章

关于学习神经网络的一些感悟

intro 本文主要是笔者学习神经网络时一些思考的感悟&#xff0c;由于本人对人工智能方向了解甚浅&#xff0c;所以记录的理解会有不正确的地方&#xff0c;欢迎批评指正&#xff01; 深度学习与传统机器学习算法的一个显著区别&#xff1a;对于传统的机器学习算法&#xff0c;可…

Sealos Devbox 发布,珍爱生命,远离 CI/CD

水滴攻击太阳系用的是最原始的攻击方式&#xff1a;撞击&#xff01;却又如此有效率。 当我们搞了一堆容器、编排、CI/CD、DevOps&#xff0c;发明了一大堆没什么用的名词之后&#xff0c;最终发现这些操作都是花里胡哨&#xff0c;让开发者越陷越深。 最终你会发现一个真理&…

2句话说通 一体化模型与矢量模型的不同

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道࿰

Mendix 创客访谈录|平台造平台真的可以吗?– 记西门子自由流业务系统的实战

本期创客 瞿凯歌 北京无尖科技有限公司 实施部技术负责人 大家好&#xff0c;我叫瞿凯歌&#xff0c;毕业于计算机科学技术&#xff0c;7年软件开发经验。目前任职于北京无尖科技有限公司&#xff0c;担任实施部技术负责人。 我们公司专注于企业数字化转型业务&#xff0c;利用…

Java8新特性, 函数式编程及Stream流用法大全

用了多少年的java8了&#xff0c;Lambda表达式和stream流也经常用&#xff0c;但是也仅限于某些用法比较熟练&#xff0c;看见了 Function、Consumer 等函数式接口还是一脸懵逼&#xff0c;现在来全面总结一下java8这些新特性&#xff0c;也为自己后续查找做个备忘。如果你只是…

体系指南|如何从0到1建设一套软件测试CMA体系

软件测试实验室在申请CMA测试认证时&#xff0c;需要根据CMA的要求&#xff0c;建立一套质量管理体系&#xff0c;还需要参照相关标准建立一套技术体系。本文我们重点介绍质量管理体系的建设。这部分内容我们可以参照《检验检测机构资质认定能力评价 检验检测机构通用要求》中&…

Python神仙级思维导图+入门教程(非常详细,入门从这篇开始)

入门 Python 绝非难事&#xff0c;但如何让自己坚持学下去是如今很多学习者面对的一大难题。为了避免像背单词永远停留在 abandon 一样&#xff0c;积极展开自救的小编在尝试过一些入门方法后&#xff0c;终于找到了一个超级棒的一份思维导图视频教程 这是我刚开始学习python时…

谷歌发布建筑数据,高度误差达惊人的1.5米

建筑数据对规划人口增长、应对危机和深入了解城市化带来的影响有很大的帮助&#xff0c;这里为大家分享谷歌全球南方带高度的建筑数据集。 数据介绍 到2050年&#xff0c;全球城市人口预计将增加25亿&#xff0c;其中近90%的增幅将出现在亚洲和非洲的城市。 但恰巧是这些地方…

World of Warcraft [WeakAuras](WA)

https://addons.wago.io/addons/weakauras WeakAuras-5.13.1 复制到自己游戏的AddOns目录 D:\Battle.net\World of Warcraft\_classic_\Interface\AddOns 启动命令 /wa

职场基本功:击退欺凌

文章目录 引言I 什么是职场欺凌?不友好行动确认对方是不是真的有敌意II 反击欺凌信任领导找到敌营里的薄弱点,击溃打手,各个击破。别急着跟欺凌者和解III 应对特殊情况的欺凌引言 面对职场欺凌,有明确敌意的。这时候需要你反击,千万别认怂。 但不是所有的欺凌行为都值得我…

HTML5实现古典音乐网站源码模板1

文章目录 1.设计来源1.1 网站首页1.2 古典音乐界面1.3 著名人物界面1.4 古典乐器界面1.5 历史起源界面2.效果和源码2.1 动态效果2.2 源代码源码下载万套模板,程序开发,在线开发,在线沟通作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/142…

一键升级 Win10 22H2 19045.5011 正式版:含9项改进和修复!

今日&#xff0c;系统之家小编给您分享2024年10月最新更新的Windows10 22H2正式版系统下载&#xff0c;该版本系统基于微软官方最新Windows10 22H2 19045.5011 64位专业版进行离线制作&#xff0c;安全无毒&#xff0c;集成万能驱动&#xff0c;且本次更新包含了9项改进和修复&…

粤港澳脑病中医药科创大会召开,助力脑病相关中药研发、转化

9月28日&#xff0c;由广州粤港澳脑病中医药产学研技术创新联盟、广州市脑病中医药大健康产学研促进会与暨南大学联合主办&#xff0c;暨南大学中医学院及中医药调控脑-外周稳态与大健康粤港澳联合实验室承办&#xff0c;中国生理学会中医药与脑稳态调控专委会、生物活性分子与…

【含开题报告+文档+PPT+源码】基于springboot的迎新系统

开题报告 大学迎新系统是为了满足大学在新生入学时的信息化处理需求而开发的系统。在传统方式下&#xff0c;我们新生接待工作是需要新生报名表&#xff0c;就使得我们需要耗费大量的纸张&#xff0c;这将造成资源浪费。在接待新生的时候需要让新生勾选、填写大量的表格&#…

电源管理芯片PMIC

一、简介 电源管理芯片&#xff08;Power Management Integrated Circuits&#xff0c;简称PMIC&#xff09;是一种集成电路&#xff0c;它的主要功能是在电子设备系统中对电能进行管理和控制&#xff0c;包括但不限于以下几点&#xff1a; 电压转换&#xff1a;将电源电压转换…

软件工程师必备技能:掌握Postman接口自动化测试

Postman 是一款功能强大的API开发工具&#xff0c;它允许用户轻松地发送HTTP请求&#xff0c;管理、测试和记录APIs。在当今的软件开发中&#xff0c;API的测试是一个至关重要的环节&#xff0c;因为它确保了不同软件模块之间的正确交互。Postman的接口自动化测试功能&#xff…

ultralytics yolo segmentation 分割 示例:加载官方segmentation 模型进行推理

Ultralytics YOLO 是计算机视觉和 ML 领域专业人士的高效工具。 安装 ultralytics 库&#xff1a; pip install ultralytics 该示例的模型地址&#xff1a;ultralyticsyolosegmentation分割模型资源-CSDN文库 大家也可以在官方连接下载&#xff0c;因为有时下载容易断开链…

【python实操】python小程序之魔法方法(__init__方法、__str__方法、__del__方法)

引言 python小程序之魔法方法&#xff08;__init__方法、__str__方法、__del__方法&#xff09; 文章目录 引言一、__init__方法1.1 题目1.2 代码1.3 代码解释1.3.1 逐行注释1.3.2 代码执行过程 二、__str__方法2.1 题目2.2 代码2.3 代码解释 三、__del__方法3.1 题目3.2 代码3…

C# HttpClient请求URL重定向后丢失Authorization认证头信息 .Net Core Web Api

问题: 使用.Net 入库Doris请求FE端口后,FE响应重定向到其他BE节点出现的认证失败问题。 搜查官方文档后发现&#xff1a; HttpWebRequest.AllowAutoRedirect Property (System.Net) | Microsoft Learn 微软提供的http类库HttpClient &#xff08;HttpWebRequest\WebClient已不…

springboot校园交友平台

基于springbootvue实现的校园交友平台 &#xff08;源码L文ppt&#xff09;4-082 第四章 系统设计 4.1 系统总体设计 系统的建设可以为校园交友管理提供帮助&#xff0c;通过对一些基础信息管理实现针对性的安排&#xff0c;可以按照用户的角色权限使不同用户角色看…