当前位置: 首页 > article >正文

spring导出多个文件,要求打包成压缩包

背景

业务要求我们批量生成一批excel,并将这些excel压缩成一个压缩包导出给前端。

实现

java自带了ZipOutputStream,可以直接生成压缩包,因此,我们直接使用这个,在内存中生成压缩包,直接返回给前端。(特别注意,这个方法要注意内存消耗问题,数据量大慎用)
代码如下:

        String fileName = "导出结果";
        String finalFileName = String.format("%s%s", URLEncoder.encode(fileName, StandardCharsets.UTF_8), ".zip");
        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
        response.setCharacterEncoding("utf-8");
        response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename*=utf-8''" + finalFileName);
        response.setHeader("fileName", finalFileName);

        try (ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream())) {
            for (Long id : condition.getIds()) {
            // 导出成excel的workbook的代码略过
                try (Workbook workbook = doExport(id )) {
                    zipOutputStream.putNextEntry(new ZipEntry(id + ".xlsx"));
                    workbook.write(zipOutputStream);
                    zipOutputStream.closeEntry();
                }
            }
            zipOutputStream.finish();
        } catch (IOException e) {
            throw new RuntimeException(e.getMessage(), e);
        }

结束


http://www.kler.cn/a/413074.html

相关文章:

  • Python学习第十三天--面向对象,类和对象
  • SpringBoot源码-spring boot启动入口ruan方法主线分析(一)
  • element ui select绑定的值是对象的属性时,显示异常.
  • 第三方数据库连接免费使用和安装
  • Kubernetes 还是 SpringCloud?
  • ⭐ Unity 资源管理解决方案:Addressable_ Demo演示
  • 论文笔记:Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
  • go里面 interface 是否为nil
  • 基于STM32的智能家居电器控制系统
  • 林业产品智能推荐引擎:Spring Boot篇
  • django小项目
  • 【微信小程序】- 位置权限
  • 数据结构C语言描述5(图文结合)--广义表讲解与实现
  • 小程序基础:流程。
  • 计算机网络:运输层 —— TCP 的超时重传机制
  • LLM-pruner源码解析
  • VS2022的MFC的ReadString的问题
  • 熔断限流:业务实现自我保护
  • C++ ADL参数依赖查找
  • scala统计词频
  • 嵌入式工程师面试笔试总结——day2
  • TorchMoji使用教程/环境配置(2024)
  • 记录下在html文件中如何直接使用npm依赖,以threejs为例
  • sentry前端接入 报错403
  • 2022 年 3 月青少年软编等考 C 语言三级真题解析
  • YourPHPCMS Register_checkEmail存在sql注入漏洞