SpringBoot 将多个Excel打包下载
在Spring Boot应用中,如果你需要将多个Excel文件打包成一个ZIP文件并提供下载,你可以使用一些Java库来帮助完成这个任务。这里我将展示如何使用Apache POI来生成Excel文件,以及使用Java.util.zip来创建ZIP文件,并通过Spring Boot的控制器提供下载功能。
一、实现思路:
1.引入Apache POI坐标,用来生成Excel文件,引入Java.util.zip用来创建ZIP文件。
2.使用Apache POI将导出的Excel构造成byte[]。
3.使用util.zip将多个byte[]输出成压缩包。
二、实现步骤:
1. 添加依赖
首先,在你的pom.xml中添加必要的依赖:
<dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Apache POI for Excel generation --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version> <!-- 请检查最新版本 --></dependency>
</dependencies>
2. 创建Excel文件
假设你已经有方法来生成Excel文件,如果没有,可以参考以下示例代码:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;public class ExcelGenerator {public static byte[] generateExcel(List<String[]> data) throws IOException {Workbook workbook = new XSSFWorkbook();Sheet sheet = workbook.createSheet("Sheet1");int rowNum = 0;for (String[] rowData : data) {Row row = sheet.createRow(rowNum++);int colNum = 0;for (String cellData : rowData) {Cell cell = row.createCell(colNum++);cell.setCellValue(cellData);}}try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {workbook.write(out);return out.toByteArray();} finally {workbook.close();}}
}
3. 创建ZIP文件
使用java.util.zip来创建包含多个Excel文件的ZIP文件:
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;@RestController
@RequestMapping("/api/excel")
public class ExcelController {@GetMapping("/download-zip")public void downloadZip(HttpServletResponse response) throws IOException {// 设置响应头response.setContentType("application/zip");response.setHeader("Content-Disposition", "attachment; filename=excel_files.zip");// 创建ZIP输出流try (ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) {// 假设我们有多个Excel数据列表List<List<String[]>> excelDataList = getExcelDataLists(); // 你需要实现这个方法for (int i = 0; i < excelDataList.size(); i++) {List<String[]> excelData = excelDataList.get(i);// 生成Excel文件内容byte[] excelBytes = ExcelGenerator.generateExcel(excelData);// 创建ZIP条目ZipEntry entry = new ZipEntry("file" + (i + 1) + ".xlsx");zos.putNextEntry(entry);// 写入Excel文件到ZIP条目zos.write(excelBytes);zos.closeEntry();}}}private List<List<String[]>> getExcelDataLists() {// 返回模拟的数据列表// 这里你需要根据实际情况返回实际的数据return List.of(List.of(new String[]{"Header1", "Header2"}, new String[]{"Data1", "Data2"}),List.of(new String[]{"HeaderA", "HeaderB"}, new String[]{"DataA", "DataB"}));}
}
4. 测试
启动Spring Boot应用后,访问/api/excel/download-zip端点,应该会触发下载一个名为excel_files.zip的ZIP文件,其中包含了多个Excel文件。
相关文章:
SpringBoot 将多个Excel打包下载
在Spring Boot应用中,如果你需要将多个Excel文件打包成一个ZIP文件并提供下载,你可以使用一些Java库来帮助完成这个任务。这里我将展示如何使用Apache POI来生成Excel文件,以及使用Java.util.zip来创建ZIP文件,并通过Spring Boot的…...
分页存储小总结
知识点: 什么是分页存储? 将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个“页框”(页框页帧内存块物理块物理页面)。每个页框有一个编号,即“页框号”(…...
Star-CCM+应用篇之动力电池温度场仿真操作流程与方法
1 动力电池温度场仿真项目 电池包内模组温度分布、电芯温度分布、温升速率、充电时间等。 2 动力电池温度场仿真分析流程图 图1 电池包热流场分析流程 3 动力电池温度场仿真参数需求 类别...
Spring Boot应用开发:从入门到精通
Spring Boot应用开发:从入门到精通 Spring Boot是Spring框架的一个子项目,旨在简化Spring应用的初始搭建和开发过程。通过自动配置和约定大于配置的原则,Spring Boot使开发者能够快速构建独立的、生产级别的Spring应用。本文将深入探讨Sprin…...
【JAVA项目】基于jspm的【医院病历管理系统】
技术简介:采用jsp技术、MySQL等技术实现。 系统简介:通过标签分类管理等方式,实现管理员;个人中心、医院公告管理、用户管理、科室信息管理、医生管理、出诊信息管理、预约时间段管理、预约挂号管理、门诊病历管理、就诊评价管理、…...
Python中的常见配置文件写法
在软件开发过程中,开发者常常需要利用一些固定的参数或常量。对于这些相对恒定且频繁使用的元素,一种常见的做法是将它们集中存储在一个特定的文件中,以避免在多个模块代码中重复定义,从而维护核心代码的清晰度和整洁性。 具体而…...
语义分割实战——基于PSPnet神经网络动物马分割系统源码
第一步:准备数据 动物马分割数据,总共有328张图片,里面的像素值为0和1,所以看起来全部是黑的,不影响使用 第二步:搭建模型 psp模块的样式如下,其psp的核心重点是采用了步长不同,po…...
Python+Appium编写脚本
一、环境配置 1、安装JDK,版本1.8以上 2、安装Python,版本3.x以上,用来解释python 3、安装node.js,版本^14.17.0 || ^16.13.0 || >18.0.0,用来安装Appimu Server 4、安装npm,版本>8,用…...
RK3288 android7.1 适配 ilitek i2c接口TP
一,Ilitek 触摸屏简介 Ilitek 提供多种型号的触控屏控制器,如 ILI6480、ILI9341 等,采用 I2C 接口。 这些控制器能够支持多点触控,并具有优秀的灵敏度和响应速度。 Ilitek 的触摸屏控制器监测屏幕上的触摸事件。 当触摸发生时&am…...
C++ 越来越像函数式编程了!
C 越来越像函数式编程了 大家好,欢迎来到今天的博客话题。今天我们要聊的是 C 这门老牌的强类型语言是如何一步一步向函数式编程靠拢的。从最早的函数指针,到函数对象(Functor),再到 std::function 和 std::bind&…...
maven工程结构说明
1、maven工程文件目录 |-- pom.xml # Maven 项目管理文件 |-- src # 放项目源文件|-- main # 项目主要代码| |-- java # Java 源代码目录| | -- com/example/myapp…...
【GESP】C++一级真题练习(202312)luogu-B3921,小杨的考试
GESP一级真题练习。为2023年12月一级认证真题。逻辑计算问题。 题目题解详见:【GESP】C一级真题练习(202312)luogu-B3921,小杨的考试 | OneCoder 【GESP】C一级真题练习(202312)luogu-B3921,小杨的考试 | OneCoderGESP一级真题练习。为2023…...
游戏中Dubbo类的RPC设计时的注意要点
一.消费方 1.需要使用到动态代理,代理指定的接口,这样子接口被调用时,就可以拿到:"类名 方法名参数返回值" 这些类型。 2.既然是rpc,那么接口被调用时,肯定在动态代理中会进行网络消息的发送&a…...
ARXML汽车可扩展标记性语言规范讲解
ARXML: Automotive Extensible Markup Language (汽车可扩展标记语言) xmlns: Xml name space (xml 命名空间) xsd: Xml Schema Definition (xml 架构定义) 1、XML与HTML的区别,可扩展。 可扩展,主要是…...
Hadoop(HDFS)
Hadoop是一个开源的分布式系统架构,旨在解决海量数据的存储和计算问题,Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)、MapReduce编程模型和YARN资源管理器,最近需求需要用到HDFS和YARN。 文章目录 HDFS优缺点HDFS的读写原理 常…...
机器学习系列----梯度下降算法
梯度下降算法(Gradient Descent)是机器学习和深度学习中最常用的优化算法之一。无论是在训练神经网络、线性回归模型,还是其他类型的机器学习模型时,梯度下降都是不可或缺的一部分。它的核心目标是最小化一个损失函数(…...
AI大模型:软件开发的未来之路
随着AI技术的快速发展,AI大模型正在对软件开发流程产生深远的影响。从代码自动生成到智能测试,AI大模型正在重塑软件开发的各个环节,为软件开发者、企业和整个产业链带来新的流程和模式变化。 首先,AI大模型的定义是指通过大规模…...
指标+AI+BI:构建数据分析新范式丨2024袋鼠云秋季发布会回顾
10月30日,袋鼠云成功举办了以“AI驱动,数智未来”为主题的2024年秋季发布会。大会深度探讨了如何凭借 AI 实现新的飞跃,重塑企业的经营管理方式,加速数智化进程。 作为大会的重要环节之一,袋鼠云数栈产品经理潮汐带来了…...
2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto- WriteUp
2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto-WriteUp Crypto:Crypto-2:Crypto-3: 前言:本次比赛已经结束,用于赛后复现,欢迎大家交流学习! Crypto: Crypto-2: …...
关于Markdown的一点疑问,为什么很多人说markdown比word好用?
markdown和word压根不是一类工具,不存在谁比谁好,只是应用场景不一样。 你写博客、写readme肯定得markdown,但写合同、写简历肯定word更合适。 markdown和word类似邮箱和微信的关系,这两者都可以通信,但微信因为功能…...
钱学森物理大一统:宇宙速度阶梯尺 全套公版正式文档(带可计算代码)
宇宙速度阶梯尺 全套公版正式文档 (无版权全开源全民通用可直接印刷发布/平台投稿/社区分发) 开篇总纲 定名:本源速度阶梯尺 核心主旨:大道至简,以地球天然标准音速为万物速度本源基底,以宇宙真空光速为速度…...
实验室里的“学霸”与街头上的“全才”:深度解析 PaLM 与 ChatGPT
在 AI 的史诗级进程中,2022 年是一个被历史铭记的分水岭。那一年,Google 推出了参数量惊人的 PaLM,展示了“暴力美学”的巅峰;而几个月后,OpenAI 的 ChatGPT 横空出世,彻底改变了人类与机器交互的方式。 很…...
三步搞定Switch破解:大气层系统完整安装与配置指南
三步搞定Switch破解:大气层系统完整安装与配置指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 大气层(Atmosphere)系统是当前最稳定、最安全的Ninte…...
29 - Go time 时间模块详解:时间处理、定时控制与底层设计
文章目录29 - Go time 时间模块详解:时间处理、定时控制与底层设计核心概念time 模块解决什么问题?Go 为什么不用字符串表示时间?time.Duration 是什么?小结基础使用示例获取当前时间时间格式化为什么是 2006-01-02?小…...
通用运放设计挑战:扫地机器人传感器信号调理实战解析
1. 项目概述:当扫地机器人遇上通用放大器最近在帮一个做智能硬件的朋友优化他们新一代扫地机器人的主控板,聊到传感器信号调理这块,他跟我大倒苦水。他说,现在的扫地机为了更“聪明”,身上集成的传感器越来越多&#x…...
Taotoken用量看板如何帮助开发者洞察API消费明细
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken用量看板如何帮助开发者洞察API消费明细 对于依赖大模型API进行开发的团队或个人而言,清晰、透明地掌握资源消…...
3分钟终极解决方案:Windows系统完美识别iPhone USB网络共享的完整免费指南
3分钟终极解决方案:Windows系统完美识别iPhone USB网络共享的完整免费指南 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https:/…...
基于MCP协议构建加密货币数据查询工具:coinpaprika-mcp详解
1. 项目概述:一个连接加密货币数据世界的桥梁 最近在折腾一个需要实时获取多种加密货币数据的项目,从价格、市值到社区动态,需求五花八门。市面上数据源不少,但要么API调用限制太死,要么数据维度不够全,要…...
使用Python快速接入Taotoken聚合大模型API的简明教程
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Python快速接入Taotoken聚合大模型API的简明教程 本文面向希望快速集成大模型能力的Python开发者,介绍如何通过官方…...
