springboot 下载 Excel 文件的 Controller 层案例
环境 pom.xml 中 springboot版本:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.15</version></parent>
Excel 文件依赖:
<!-- POI --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.1</version></dependency>
demo1
// 下载 Excel@GetMapping(value = "/downloadData")public ResponseEntity<byte[]> downloadData2(@RequestParam("id") String id) throws IOException {log.info("---------------downloadData start-------------");String rootDirectory = request.getServletContext().getRealPath("/");log.info("rootDirectory:"+rootDirectory);// 临时放置文件目录Path p = Paths.get(rootDirectory, "temp");if (!p.toFile().exists()) {p.toFile().mkdirs();}log.info("---------------downloadData start 2 Render.... -------------");// 写 业务逻辑,生成 Excel FileFile file = null; log.info("###------------the excel file address:"+file.getAbsolutePath());// 下载成功返回二进制流return getResponseEntity(file,null,false);}private static ResponseEntity<byte[]> getResponseEntity(File file,String userAgent,boolean inline) throws IOException {ResponseEntity.BodyBuilder bodyBuilder = ResponseEntity.ok();bodyBuilder.contentLength(file.length());// 二进制数据流
// bodyBuilder.contentType(MediaType.APPLICATION_OCTET_STREAM);// 文件名编码String encodeFileName = URLEncoder.encode(file.getName(), "UTF-8");// IEif (userAgent!=null&&userAgent.indexOf("MSIE") > 0) {bodyBuilder.header("Content-Disposition", "attachment;filename=" + encodeFileName);} else { // 其他浏览器if (inline) {// 在浏览器中直接打开URL url = new URL("file:///" + file);bodyBuilder.header("Content-Type", url.openConnection().getContentType());bodyBuilder.header("Content-Disposition", "inline;filename*=" + encodeFileName);} else {// 直接下载bodyBuilder.header("Content-Disposition", "attachment;filename*=" + encodeFileName);bodyBuilder.header("Content-Type","application/vnd.ms-excel;charset=utf8");}}// 下载成功返回二进制流return bodyBuilder.body(Files.readAllBytes(file.toPath()));}
demo2
@GetMapping(value = "/download2")public void download2(@RequestParam("id") String id,@RequestParam(required = false, defaultValue = "false") @ApiParam("参数 inline表示是否要在线浏览,true是,false否(默认).") boolean inline,@RequestHeader("user-agent") @ApiParam("参数userAgent 是为了兼容IE判断,如果使用谷歌,火狐浏览器就可以省略这个参数.") String userAgent,ServletRequest request,HttpServletResponse response) throws IOException {String rootDirectory = request.getServletContext().getRealPath("/");
// System.out.println("rootDirectory:"+rootDirectory);// 临时放置文件目录Path p = Paths.get(rootDirectory, "temp");if (!p.toFile().exists()) {p.toFile().mkdirs();}// 根据业务生成 文件File file = new File("");this.download(response,file,null);}private void download(HttpServletResponse response, File file, String fileName){if(fileName==null){fileName = file.getName();}try(FileInputStream is = new FileInputStream(file);OutputStream os = response.getOutputStream()) {//通用的mime类型response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));byte[] buf = new byte[1024];int len = 0;while((len = is.read(buf))!=-1){os.write(buf,0,len);}}catch (Exception e) {throw new RuntimeException(e);}}
相关文章:
springboot 下载 Excel 文件的 Controller 层案例
环境 pom.xml 中 springboot版本: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.15</version></parent>Excel 文件依赖: &l…...
RabbitMQ队列
RabbitMQ队列 1、死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer将消息投递到broker或者直接到queue里了,consumer 从 queue取出消息进行消…...
Day12:信息打点-Web应用源码泄漏开源闭源指纹识别GITSVNDS备份
目录 开源-CMS指纹识别源码获取方式 闭源-习惯&配置&特性等获取方式 闭源-托管资产平台资源搜索监控 思维导图 章节点 Web:语言/CMS/中间件/数据库/系统/WAF等 系统:操作系统/端口服务/网络环境/防火墙等 应用:APP对象/API接口/微…...
使用正确的技术和项目管理工具来定义项目范围
根据 PMI 的统计,34% 的项目会出现范围蔓延:悄悄增加超出范围的活动,威胁到利润空间、项目成功率和客户满意度。 预防和控制范围蔓延的方法之一,是首先明确界定项目范围。 项目范围是项目规划、资源调度和变更管理的重要步骤。然…...
【C++】类型转换和IO流
目录 C语言中的类型转换 C eplicit && volatitle eplicit volatile C强制类型转换 static_cast(相关类型) reinterpret_cast(不相关类型) const_cast(去掉const属性) dynamic_cast RTTI(了解) IO流 …...
leetCode刷题 5.最长回文子串
目录 1. 思路 2. 解题方法 3. 复杂度 4. Code 题目: 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s "babad" 输出&#x…...
计算机组成原理面试题
计算机组成原理是计算机科学的基础课程之一,涉及计算机系统的基本结构和工作原理。以下是一些可能出现在面试中的计算机组成原理相关题目: 1. **什么是冯诺依曼体系结构?** - 冯诺依曼体系结构是一种计算机组织架构,它将程序指…...
「Mybatis深入三」:高级查询-模糊查询
一、需求 根据username 模糊查询user 表 二、代码演示 1、方式1 数据库环境 CREATE DATABASE mybatis_db; USE mybatis_db; CREATE TABLE user (id INT(11) NOT NULL AUTO_INCREMENT,username VARCHAR(32) NOT NULL COMMENT 用户名称,birthday DATETIME DEFAULT NULL COMMEN…...
LabVIEW管道缺陷智能检测系统
LabVIEW管道缺陷智能检测系统 管道作为一种重要的输送手段,其安全运行状态对生产生活至关重要。然而,随着时间的推移和环境的影响,管道可能会出现老化、锈蚀、裂缝等多种缺陷,这些缺陷若不及时发现和处理,将严重威胁到…...
java在cmd中乱码的问题解决
本文深入探讨了在使用 Java 命令行(cmd)时可能出现的中文乱码问题,并提供了两种解决方案。首先,通过临时的方式,用户可以执行命令 chcp 936 选择字符集,然后再运行 Java 命令,确保在选择字符集过…...
OpenHarmony教程指南—ArkUI中组件、通用、动画、全局方法的集合
介绍 本示例为ArkUI中组件、通用、动画、全局方法的集合。 本示例使用 Tabs容器组件搭建整体应用框架,每个 TabContent内容视图 使用 div容器组件 嵌套布局,在每个 div 中使用 循环渲染 加载此分类下分类导航数据,底部导航菜单使用 TabCont…...
第二证券|金价逼近历史高点 黄金股价值有望重估
经过两个多月的震荡后,黄金打响新一波攻势,期货商场价格已逼近前史高点。 有分析认为,虽然黄金价格短期已有显着涨幅,存在震荡或许,但中长时间看,跟着美联储钱银政策的转向,黄金价格仍有上行动…...
关于51单片机晶振定时问题
单片机中晶振频率为12MHZ的机器周期怎么算? 1、系统晶振频率是12M,则机器周期=12/12=1us; 2、定时1ms=1*1000=1000us; 3、工作在方式1下:最大计数值是2&a…...
NoSQL--2.MongoDB配置(Windows版)
目录 2.MongdoDB配置 2.1 Windows环境下操作 2.1.1 注册MongDB Atlas: 2.1.2 MongoDB Community Server Download: 2.1.3 启动MondgoDB服务: 2.1.3.1 命令行参数的方式启动MongoDB服务: 2.1.3.2 使用配置文件方式启动Mongo…...
HTML静态网页成品作业(HTML+CSS)——安徽宣笔设计制作(5个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有6个页面。 🏷️想要…...
MySQL CTEs通用表表达式:进阶学习-递归查询
MySQL CTEs通用表表达式:进阶学习-递归查询 递归通用表表达式是其会引用自身的通用表表达式。 CTEs 递归通用表表达式补上了MySQL8之前无法使用递归查询的空白。在之前,递归查询需要使用函数等方法实现。 基础使用,请参考前文: …...
[Java安全入门]二.序列化与反序列化
一.概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。将程序中的对象,放入文件中保存就是序列化,将文件中的字节码重新转成对象就是反…...
Dutree:Linux 文件系统磁盘使用追踪工具
在 Linux 系统中,对文件系统的磁盘使用情况进行跟踪和管理是至关重要的。dutree 是一个功能强大的工具,它能够以可视化的方式展示文件系统中的目录和文件的大小,帮助用户更好地了解磁盘空间的使用情况。本文将介绍 dutree 工具的使用方法、功…...
http和https的区别是什么?
–前言 传输信息安全性不同、连接方式不同、端口不同、证书申请方式不同 一、传输信息安全性不同 1、http协议:是超文本传输协议,信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。 2、h…...
学习Android的第十九天
目录 Android ExpandableListView 分组列表 ExpandableListView 属性 ExpandableListView 事件 ExpandableListView 的 Adapter 范例 参考文档 Android ViewFlipper 翻转视图 ViewFlipper 属性 ViewFlipper 方法 为 ViewFlipper 加入 View 例子:全屏幕可…...
B站视频转文字终极指南:5分钟掌握高效知识管理神器
B站视频转文字终极指南:5分钟掌握高效知识管理神器 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾为了一段精彩的B站课程内容࿰…...
开源AI工作流框架:模块化设计、低代码实践与自动化场景构建
1. 项目概述:当AI工作流遇上开源协作最近在GitHub上闲逛,发现了一个挺有意思的项目,叫“kiki-ai-workflow”。光看这个名字,你可能会有点懵,“kiki”是谁?“AI工作流”又具体指什么?作为一个在自…...
从直流平衡到时钟恢复:深入剖析8B10B编码在高速串行链路中的核心作用
1. 8B10B编码:高速串行通信的"交通警察" 第一次接触PCIe调试时,我拿着示波器看到波形图上那些密集的跳变信号完全摸不着头脑。直到前辈指着屏幕说:"看见这些有规律的0/1跳变了吗?这就是8B10B在指挥交通。"这个…...
OpenClaw用户指南,如何正确配置Taotoken作为其大模型供应商
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 OpenClaw用户指南,如何正确配置Taotoken作为其大模型供应商 对于使用OpenClaw这类Agent框架的开发者来说,接…...
植物树枝叶片果实检测数据集7220张VOC+YOLO格式
植物树枝叶片果实检测数据集7220张VOCYOLO格式数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):7220 标注数量(xml文件个数):7220…...
QT无边框窗口实战:从圆角绘制到自定义标题栏与拖拽交互
1. 为什么需要无边框窗口? 现代桌面应用越来越注重视觉体验,传统的系统标题栏往往与整体设计风格格格不入。想象一下,你精心设计了一款深色主题的音乐播放器,顶部却突兀地挂着Windows默认的白色标题栏——这种割裂感正是无边框窗口…...
央视刷屏燃了!82 岁“中国刻蚀机之父”放狠话:我们已有能力来做最先进的设备
5 月 16 日央视《对话》播出后,82 岁的“中国刻蚀机之父”尹志尧一夜刷屏,相关话题冲上热搜,背后是他的硬核宣言:我们现在已经有能力来做最先进的设备。①尹志尧早年赴美深造,在半导体设备领域深耕数十年。他曾先后在英…...
告别UUID!用Apache Commons Lang3的RandomStringUtils生成更灵活的随机字符串(Java实战)
告别UUID!用Apache Commons Lang3的RandomStringUtils生成更灵活的随机字符串(Java实战) 在Java开发中,生成随机字符串的需求无处不在——从用户邀请码、临时密码到订单编号,我们经常需要快速生成一串既随机又可读的字…...
锂离子动力电池机理建模与系统状态评估【附代码】
✨ 长期致力于新能源汽车、动力电池系统、状态监测与评估、Matlab/Simulink研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)全阶电化学-热耦合模型的有…...
特斯拉Model 3无线充电垫DIY:基于Qi标准与3D打印的集成方案
1. 项目概述:为你的特斯拉Model 3打造专属无线充电垫作为一个喜欢在车里折腾点小玩意儿的车主,我总觉得特斯拉Model 3中控台那两个USB-C接口有点不够用,每次上车给手机充电都得插线,线缆还容易在储物格里缠成一团。原厂虽然提供了…...
