springboot集成easyexcel实现服务器无存储的文件下载

SpringBoot整合EasyExcel实现Excel导入导出/上传下载至数据库 上一篇写了一个SpringBoot整合poi实现excel导入导出的,但是使用poi会有一些问题,这时阿里带着EasyExcel来了。 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用P 阅读详情
业务背景

系统中存在大量的统计业务。统计查询条件基本都是根据时间和多个条件的组合进行分页查询,并返回查询结果
统计导出功能导出的是符合条件的所有数据,不仅是当前页面展示的分页数据,所以导出功能需放在服务端完成
统计业务较多,统计结果返回数据没有添加对应的视图类,而是直接返回的map数组序列化成的json
返回的excel数据,除了字段相关的header,header行之前还有一些特殊说明,直接调用excel的api写excel的头会比较麻烦

集成easyexcel

pom中添加依赖

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.0.5</version>
        </dependency>
实现无存储下载

思路

  • 统计结果随时间的变化较大,先在服务端生成excel,作为缓存再导出意义不是太大,所以选择直接用easyexcel的API生成文件流写出去,而不在服务端存储
  • 考虑到每个excel的文件头会有些特殊情况,并且没有添加对应的类来映射excel的行,所以直接采用模板的方式,准备好excel头的模板
  • 在springboot项目的resources目录下,新建excel_template目录,将模板放到该目录下
  • easyexcel读取模板有三种方式,一个是文件路径,一个是文件,一个是输入流。web项目打成jar包后文件目录和在idea里面开发的文件目录会发生变化,用路径或是文件的方式来作为参数要做不少的处理,试了几种都没有成功,最后采用输入流的方式来做处理
  • 用输入流作为模板参数,要注意模板文件名的后缀需要为xlsx,不是xls,不然会报错

实现

package com.wind.test_web.common.commonUtil;

import com.alibaba.excel.EasyExcel;
import org.springframework.core.io.ClassPathResource;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

/**
 * title: ExcelUtil
 * author: wind
 * description: excel util, generate excel
 **/
public class ExcelUtil {

    private static final String EXCEL_TEMPLATE_DIR = "excel_template/";;

    /**
     * 根据模板写文件到输出流
     * @param response:
     * @param fileName: 输出文件名字,文件名后缀需要和模板文件后缀一致。文件名可以和模板名字一样
     * @param data: 输出数据
     * @throws IOException:
     */
    public static void noModelDownloadWithTemplate(
            HttpServletResponse response,
            String fileName,
            List<List<Object>> data) throws IOException {

        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encodedFileName);
        // E:\采集设备报警统计.xls
        EasyExcel.write(response.getOutputStream())
                .needHead(Boolean.FALSE)
                .withTemplate(getExcelTemplateInputStream(fileName))
                .sheet()
                .doWrite(data);
    }

    public static InputStream getExcelTemplateInputStream(String templateName) throws IOException {
        return new ClassPathResource(EXCEL_TEMPLATE_DIR + templateName).getInputStream();
    }

}

参考
官方文档

SpringBoot使用easyExcel导入导出Excel文件 SpringBoot使用easyExcel导入导出Excel文件 一、项目原因 最近公司业务上有导入导出Excel的需求,自己有点看不懂,于是上网看了一些大神的思路,学会了一些,给大家分享一下。 二、项目的思路 Excel导入 浏览文件夹,选择需要上传的文件 将本地文件上传至服务器指定位置 服务器解析Excel文件 将Excel中解析的数据存入数据库中 Excel导出 设定查询条件 数据库中查询相应的数据 将数据写入Excel 将Excel下载至本地 这里建议小伙伴们使用Postman去测试接口 三 阅读详情

相关推荐

Springboot使用EasyExcel读写excel(详细)

文章目录Springboot使用EasyExcel读写Excel(超级详细) 本地读取 web上传 本地导出 web下载

yd的博客 1万+

easyExcel文件上传与下载

在srping是使用easyExcel进行文件上传与下载

a806451906的博客 1484

SpringBoot第56讲:SpringBoot集成文件 - 集成EasyExcel之Excel导入导出

EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。它能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。它是基于POI来封装实现的,主要解决其易用性,封装性和性能问题。本文是SpringBoot第56讲,主要介绍通过SpringBoot集成Excel实现Excel的导入,导出和填充模板等功能。

Jet_qi的博客 1452

EasyExcel 上传excel文件下载

2.创建上传接口:在您的后端应用程序中创建一个接口,用于接收上传的Excel文件。前端实现:在前端页面中,创建一个文件上传表单,确保表单的enctype属性设置为 multipart/form-data,并将文件上传到后端的上传接口。在写入Excel文件时,我们使用了 ExcelWriter 和 WriteSheet 对象来创建Excel写入器,并将异常信息逐行写入Excel文件。这样,当上传Excel文件时发生异常,异常信息将会被写入到生成的Excel文件中,以便用户下载并查看。

qq_38772518的博客 657

从数据集到产品:聊聊Room-to-Room (R2R) 如何影响扫地机器人、AR导航的未来

本文探讨了Room-to-Room (R2R) 数据集如何推动视觉与语言导航(VLN)技术的发展,并重塑扫地机器人和AR导航的未来。通过分析R2R基于Matterport3D的设计及其在真实场景中的应用,揭示了其在提升智能导航精度和自然语言交互能力方面的潜力。文章还讨论了从实验室到产品化的关键技术挑战与解决方案。

weixin_29084231的博客 143

[Linux外设驱动详解]RK3588 U-Boot网络功能深度分析

本文深入分析了RK3588平台上U-Boot的网络功能实现,主要内容包括: 网络架构:详细剖析了从硬件层到协议层的完整网络栈架构,包括GMAC驱动、TFTP/NFS启动、网络命令等关键组件。 驱动实现:重点介绍了RK3588 GMAC驱动结构,包含关键数据结构、专用操作函数集、设备树兼容性配置和GRF寄存器设置。 功能实现:详细说明了驱动初始化流程、RGMII速度适配机制以及PHY接口配置过程。 高级特性:涵盖了网络启动功能、镜像更新和MAC地址传递到Linux内核的机制。 文档通过代码片段和流程图清晰展示

Just Linux! 1115

使用 EasyExcel 读取和下载 excel 文件

前言 EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单,节省内存著称,EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。 EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。 构建工具类 @Data public class User{ @ExcelProperty(value = "名称", index =

weixin_42962634的博客 6237

AD9361快速锁定实战:Profile寄存器配置与频率调谐算法解析

本文深入解析了AD9361射频收发器的快速锁定(Fast Lock)功能,重点阐述了其核心机制——Profile寄存器配置。通过剖析16字节Profile结构,详细讲解了频率调谐算法,包括LO_DIV、LO_INT、LO_FRAC等关键参数的计算,以及如何通过查表获取优化的环路滤波器参数。文章提供了完整的Python算法示例和FPGA实现要点,旨在帮助工程师实现毫秒级甚至微秒级的频率切换,满足跳频通信等高性能应用需求。

weixin_29196315的博客 229

EasyExcel使用(实现文件上传下载)

easyexcel

YLXCA的博客 2921

《软件工程——实践者的研究方法》重难点复习笔记(第八章——理解需求)

8项需求工程任务 inception 开始 8.1.1 identify stakeholders 定义:从软件开发中收益 例如:市场人员、销售经理、顾客、顾问、维护团队等(P139) 8.1.2 这个阶段的问题是context-free的。有三套(P140) 8.1.3 提到NFR(nonfunctional requirement)和QFD(quality

whooiif的博客 1815

泛微OA与泛微OA之间打通实现统一待办配置

问题:学校OA与集团OA均为泛微Ecology8.0 ,由于流程审批互通的需要,要将两套OA系统打通,实现跨系统的流程流转。

symstandsun的博客 2270

easyexcel使用教程-导出篇

easyExcel使用教程–导出篇 开始准备工作 1、导入Maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency> <dependency> <groupId>or

chenxjuc的博客 3万+

BES 平台 SDK之 美格信Dongle 连接

最近项目到了试产阶段,需要用到美格信的Dongel 来测试ANC 相关功能。在此简单介绍下如何连接Dongel 的操作步骤。

谢文浩博客 926

SpringBoot集成EasyExcel实现Excel下载

SpringBoot集成EasyExcel实现Excel下载 一、背景 为什么会用Easyexcel来做Excel下载 项目中的Excel导入功能刚做好,领导又来了:这次要导出功能。我导入才刚整明白呢,你又来了。但是没有办法,领导才是衣食父母嘛,只有干了。 阿里巴巴语雀团队对EasyExcel是这样介绍的 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存, poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一

Lonely Programmer 2400

Spring AI Alibaba实战训练营-05模型输出质量评估

本文介绍了使用Spring AI Alibaba库评估AI模型输出质量的方案。项目通过5种评估器实现自动化评估:相关性评估、事实准确性评估、答案相关性评分、答案正确性评估和忠实度评估。开发步骤包括环境准备(Java 17、Maven、API Key获取)、创建Maven项目、配置Spring AI(通过环境变量安全设置API Key)以及实现RAG流程。重点强调了通过评估器自动检测AI输出的质量指标,帮助开发者优化AI应用性能。

program哲学 218

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SpringBoot项目中集成EasyExcel实现Excel文件上传至MySQL

一、背景 最近项目中遇到了这样的需求,要实现从前端导入Excel文件至MySQL数据库。开始我的第一想法就是用 POI,毕竟我之前有用过 POI 来实现这样类似的功能。不同的是 POI 是导入前端传来的 JSON 数据,而这次的需求直接传个 Excel 文件,还想着怎么把 Excel 里的数据怎么解析出来呢?这时无意间发现了 alibaba 开源的 EasyExcel。哈哈哈,来的早不如来得巧。想...

riemann_的博客 4543

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【Excel】使用 SpringBoot 实现 Excel 文件的导入与导出

为了大家能更好地理解这篇博文,在看之前,建议去看看我的上一篇博文:【File】使用 SpringBoot 实现文件的上传与下载 这两篇博文互有联系:文件的导入就是文件的上传;文件的导出就是文件的下载。 至于为什么是 导入/导出 Excel 文件呢?因为 Excel 文件用的频率更多吧。顺便来复习下通过 EasyExcel 来操作 Excel 文件。 ...

sco5282的博客 3万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SpringBoot用easyExcel实现excel文件上传至数据库与下载数据库数据为Excel

@SpringBoot实现Excel文件上传至数据库与下载数据库数据为Excel 这里是整合poi实现的,后来发现poi有一些缺陷,但这些缺陷被阿里的EasyExcel解决了,于是采用了第二种。 一、第一种(不推荐,推荐下方第二种使用easyExcel) 首先创建一个SpringBoot项目,pom.xml中加入操作Excel需要的jar包 <dependency> <groupId>org.apache.poi</groupId> <artifa

洛水逆风向西 1380

EasyExcel实现文件上传下载(百万级数据、单元格自定义样式)

Java解析、生成Excel比较有名的框架有Apache poijxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。EasyExcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;

从基础到源码解析的学习记录 4522

SpringBoot使用easyexcel

Spring boot集成easyexcel easyexcel相比其他excel框架的读取,easyexcel更省内存,上手容易 git地址: https://github.com/alibaba/easyexcel 官网地址:https://www.yuque.com/easyexcel/doc/easyexcel 首先再pom文件中添加引入 <dependency> <groupId>com.alibaba</groupId> <artifac

qq_42005257的博客 1209

Spring Boot整合EasyExcel:实现大规模数据的并行导出与压缩下载

本文介绍了使用Spring Boot和EasyExcel实现大规模数据高效导出的方法,通过数据分批处理、并行处理和文件压缩等技术手段,提升了导出效率并优化了用户体验,特别适用于需要处理大量数据的企业系统。

Yaml4的博客 2596

SpringBoot整合EasyExcel上传下载前后端

【代码】SpringBoot整合EasyExcel上传下载前后端。

daai5201314的博客 934

SpringBoot+EasyExcel 实现300万数据快速导出

SpringBoot+EasyExcel 实现300万数据快速导出

weixin_46619605的博客 1557

EasyExcel实现Excel文件的导入导出

EasyExcel实现Excel文件的导入导出 前言 在我们日常的开发过程中经常会使用Excel文件的形式来批量地上传下载系统数据,我们最常用的工具是Apache poi,但是如果数据到底上百万时,将会造成内存溢出的问题,那么我们怎么去实现百万数据批量导入导出。 正文 Easyexcel Easyexcel 是阿里巴巴的开源项目,用来优化Excel文件处理过程: poi消耗内存严重:Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi

蹊源的奇思妙想的博客 1万+
上一篇: spring JPA 处理字段名动态变化的条件查询
下一篇: CDH集群问题处理 -- NTP服务不同步,系统盘占用多的迁移
xufwind
博客等级 码龄11年 27粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值