根据若依系统+minio实现批量下载附件并自动压缩成zip

2023-05-16

效果实现:

 

分割!!!!

以下代码参考于

http://t.csdn.cn/4dUmDwg


话不多说 直接从后端开始

0.首先是pom依赖

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.5.7</version>
</dependency>

1.后端Controller

ids和tableName为我业务需要(主要是查询数据库的附件表)

    /**
     * 下载多个文件转zip压缩包
     * @param ids
     * @param tableName
     * @param response
     * @throws Exception
     */
    @RequestMapping("/dowloadToZip/{ids}/{tableName}")
    public void dowloadToZip(@PathVariable Long[] ids,@PathVariable String tableName,HttpServletResponse response) throws Exception {
        fileService.dowloadToZip(ids,tableName,response);
    }

2.Service实现层

需要各位自己搜索minio关于下载的代码 也就是获取图片的inputStream流(因为各自代码逻辑不同)


    /**
     * 下载多个文件转zip压缩包
     *
     * @param ids
     * @param tableName
     * @param response
     * @throws Exception
     */
    @Override
    public void dowloadToZip(Long[] ids, String tableName, HttpServletResponse response) throws Exception {
        for (Long id : ids) {
            int i = 0;
            List<Attachment> attachments = attachmentService.attachmentSearch(id.toString(), tableName);
            //如果有附件 进行zip处理
            if (attachments != null && attachments.size() > 0) {
                //被压缩文件流集合
                InputStream[] srcFiles = new InputStream[attachments.size()];
                //被压缩文件名称
                String[] srcFileNames = new String[attachments.size()];
                for (Attachment attachment : attachments) {
                    //以下代码为获取图片inputStream 
                    String url = attachment.getUrl();
                    String[] names = url.split("/");
                    String name = tableName + "/" + names[names.length - 1];
                    GetObjectArgs args = GetObjectArgs.builder().bucket(minioConfig.getBucketName()).object(name).build();
                    InputStream inputStream = client.getObject(args);
                    if (inputStream == null) {
                        continue;
                    }
                    //塞入流数组中
                    srcFiles[i] = inputStream;
                    srcFileNames[i] = attachment.getAttachmentName();
                    i++;
                }
                response.setCharacterEncoding("UTF-8");
                response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("下载.zip", "UTF-8"));
                //多个文件压缩成压缩包返回
                ZipUtil.zip(response.getOutputStream(), srcFileNames, srcFiles);
            }

        }
    }

后端到这里就结束了,主要注意两个地方


1. ZipUtil是用pom导入依赖

2. 需要各自补充获取图片inputStream的代码 然后放入InputStream[]这个数组中即可

      


再其次回到前端

前端方面更简单

1. 找到前端项目的request.js 查看是否有download方法

如果有这个方法就简单 没有的话 各位自己copy吧!

 2.找到 button批量下载证件 按钮 赋值@click="zipDownload" 并实现download代码块


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据若依系统+minio实现批量下载附件并自动压缩成zip 的相关文章

  • python报错Statements must be separated by newlines or semicolons解决方法

    今天做练习时遇到这样的报错 xff1a Statements must be separated by newlines or semicolons 翻译一下就是 xff1a 语句必须用换行符或分号分隔 首先按报错提示 xff0c 我把cl
  • python自然语言处理之spacy详解

    spaCy简介 spaCy号称工业级Python自然语言处理 xff08 NLP xff09 软件包 xff0c 可以对自然语言文本做词性分析 命名实体识别 依赖关系刻画 xff0c 以及词嵌入向量的计算和可视化等 spaCy模块有4个非常
  • anaconda创建env报错 ResolvePackageNotFound

    具体错误 如图 xff1a 按照其他博主 xff08 方法详情 xff09 提供的方法操作了还是有部分报错 xff1a 解决策略 继续上面解决剩下的部分报错 xff0c 打开 yaml文件 xff0c 记事本打开就行 将报错列出的几个包移到
  • LDA主题建模过程及参数详解

    平台及工具 语言 xff1a python 平台 xff1a anaconda 43 jupyter notebook 语料库 xff1a 近三百篇英文文献的摘要 主要代码 首先 xff0c pandas处理csv数据 span class
  • 已经成功安装了但是jupyter notebook仍然找不到模块

    问题描述 工具 语言 jupyter notebook 43 anaconda python 有时会遇到这样的情况 xff0c 命名已经install了模块 xff0c notebook还是报找不到模块错误 再装已经提示satisfied
  • pyecharts 地图绘制

    环境描述 win11 jupyter notebook 目标效果 世界地图 43 按数据进行分级着色 xff1b 最终效果图如下 xff1a pyecharts 绘制地图时注意点 可以实现目标地图绘制效果的python库很多 xff0c 这
  • 指定wb用户在指定日期范围内的wb内容抓取

    一 操作步骤 只记录过程 xff0c 不讲述原理 1 获取用户ID和cookie 用户ID在进入个人主页时导航栏中就会有显示 xff0c 例如下面这样 xff1a cookie获取 xff08 有的代码无需cookie也能运行 xff09
  • 中介变量、调节变量与协变量

    在平时看论文过程中偶会接触到这几个概念 xff0c 然而都没想过弄明白 xff0c 每次总觉得只要看明白个大概反正自己又不用这种方法 作为科研人 xff0c 还是应该保持谦逊 xff0c 保持学习 一 中介变量 1 概念 中介变量 xff0
  • linux环境搭建

    文章目录 linux环境搭建基础工具环境docker镜像docker 的基本操作git amp amp sshbash脚本 python 环境 linux环境搭建 基础工具环境 docker镜像 Docker CE 镜像源站 docker如
  • 【Linux】状态机

    Linux 状态机 首先感谢阅读 xff0c 作者是在工作中学习与积累 xff0c 每一个笔记都是心得和积累 xff0c 希望可以和大家一起交流学习 学习咱们先定好计划 xff0c 需要了解的都一样 xff0c 有 xff1a xff08
  • MyBatisPlus源码

    MyBatisPlus源码 文章目录 MyBatisPlus源码1 通用Mapper 96 BaseMapper 96 2 顶级Mapper 96 Mapper 96 3 通用Service 96 IService 96 4 通用Servi
  • bomb二进制炸弹拆除实验(MIPS)

    上学期计算机系统基础课程的一个实验 xff0c 在这里再简略整理一下 xff1a 实验要求 xff1a 仅给定一个MIPS二进制可执行文件bomb xff0c 要求运用GDB调试工具 xff0c 通过分析反汇编代码来输入正确的参数以拆除炸弹
  • 图与网络可视化实战(matlab实现)

    本篇以2020年数学建模美赛D题的足球传球网络可视化为例 xff0c 分三大步骤来简单讲解一下matlab在图与网络可视化方面的应用 xff1a Step1 构图 xff1a 首先根据输入数据构造邻接矩阵 xff0c 然后调用matlab中
  • Week8 - 程序设计思维与实践 - HRZ的序列(第二次CSP模拟T1)

    T1 HRZ的序列 该比赛已结束 xff0c 您无法在比赛模式下递交该题目 您可以点击 在题库中打开 以普通模式查看和递交本题 题目描述 相较于咕咕东 xff0c 瑞神是个起早贪黑的好孩子 xff0c 今天早上瑞神起得很早 xff0c 刷B
  • Week8 - 程序设计思维与实践 - HRZ学英语(第二次CSP模拟T2)

    T2 HRZ学英语 该比赛已结束 xff0c 您无法在比赛模式下递交该题目 您可以点击 在题库中打开 以普通模式查看和递交本题 题目描述 瑞神今年大三了 xff0c 他在寒假学会了英文的26个字母 xff0c 所以他很兴奋 xff01 于是
  • Week14 - 程序设计思维与实践 - 矩阵快速幂(+优化DP)

    题目连接 A Q老师与石头剪刀布 xff08 必做 xff09 题意 每一个大人曾经都是一个小孩 xff0c Q老师 也一样 为了回忆童年 xff0c Q老师 和 Monika 玩起了石头剪刀布的游戏 xff0c 游戏一共 n 轮 无所不知
  • Week14 - 程序设计思维与实践 - HDU3700 - Cat(限时模拟)

    Problem Description There is a cat cat likes to sleep If he sleeps he sleeps continuously no less than A hours For some
  • SDU《程序设计思维与实践》课程个人感想

    这门课到此也就宣告结束了呀 xff0c 回想过去居家学习的 16 周真的是既辛酸又充实 由于是非竞赛生 xff0c 之前没怎么接触过算法刷题这一方面 xff0c 唯一学的点算法也是来自上学期的数据结构 xff0c 回想刚开始上这门课的时候
  • 跳表的实现、分析以及可视化(Qt C++、Graphviz)

    演示程序截图 实现功能 跳表初始化跳表的查找操作跳表的插入操作跳表的删除操作 xff08 指定关键字的元素 关键字最小的元素 关键字最大的元素 xff09 跳表可视化 程序结构设计 初始化模块 xff1a void Initializati
  • 1、stm32F103入门学习--开发环境搭建(一)

    stm32简介 这款是网上销量比较多的板子 xff0c 我找板子主要还是看价格 xff0c 20元左右 xff0c 不需要太贵 xff0c 只是做个核心入门 xff0c 不要太多的外设 xff0c 特别是对初学者 xff0c 因为从来没见过

随机推荐