浏览器文件下载

文章目录

  • 浏览器下载json普通文件
  • 浏览器下载excel文件【借助Workbook】

浏览器下载json普通文件

 /*** 设备模型导出(带分组).** @param request  请求* @param response 响应*/@ProjectResource@Operation(summary = "设备模型导出(带分组)")@PostMapping("/export")@AuditLog(source = AuditSourceType.PLATFORM, operationEvent = "设备模型导出(带分组)", resourceType = "${knife4j.openapi.description}",operType = AuditOperationType.EXPORT)public void exportWithGroup(HttpServletRequest request, HttpServletResponse response) {var user = SecurityUtils.getCurrentUser();bizTypeService.exportWithGroup(request, response, user);}@Overridepublic void exportWithGroup(HttpServletRequest request, HttpServletResponse response, SecurityUser user) {// 1. 组合数据ExportDto exportDto = new ExportDto();exportDto.setTypes(types);exportDto.setGroups(groups);// 2. 下载PrintWriter writer = null;try {response.setContentType("application/octet-stream");response.setCharacterEncoding("utf-8");response.setHeader("content-disposition", "download;filename*=utf-8''" + URLEncoder.encode("device_model_type.json", "UTF-8"));writer = response.getWriter();writer.write(JacksonUtils.writeValueAsString(exportDto));} catch (Exception e) {throw new RuntimeException(e);} finally {writer.close();}}

浏览器下载excel文件【借助Workbook】

     @Overridepublic void exportRunningRecords(HttpServletRequest request, HttpServletResponse response) {// 1.  查询数据     List<RunningRecordsDto> data = resultDto.getItems();// 2. 导出数据List<String> headers = new ArrayList<>();headers.add("设备名称");headers.add("设备编号");headers.add("所属模型");headers.add("安装位置");headers.add("服务范围");headers.add("运行次数");headers.add("运行时长");List<List<Object>> dataList = new ArrayList<>();for (RunningRecordsDto item : data) {List<Object> list = new ArrayList<>();list.add(item.getName());list.add(item.getCode());list.add(item.getTypeName());list.add(item.getLocationName());list.add(item.getServiceArea());list.add(item.getCounts());list.add(item.getDuration());dataList.add(list);}try {ExcelUtils.writeExcel(headers, dataList, "设备运行记录.xlsx", request, response);} catch (Exception e) {log.error("设备运行记录导出异常", e);}}/*** 导出最精简的excel.** @param headers  (不是必填) excel头列 比如: 姓名  年龄  性别 ..* @param datas    (必填) 数据列(请确保和列的顺序保持一致)* @param fileName 生成excel的文件名称,如果不传则默认为随机生成* @param request  HttpServletRequest* @param response HttpServletResponse* @throws Exception 异常*/public static void writeExcel(List<String> headers, List<List<Object>> datas, String fileName,HttpServletRequest request, HttpServletResponse response) throws Exception {Workbook workbook = generateWorkBook(headers, datas);// 文件名处理一下//设置编码final String userAgent = request.getHeader("USER-AGENT");if (StringUtils.contains(userAgent, MSIE) || StringUtils.contains(userAgent, "Trident") || StringUtils.contains(userAgent, "Edge")) {fileName = new String(URLEncoder.encode(fileName, "UTF-8").getBytes("UTF-8"), "ISO-8859-1");} else if (StringUtils.contains(userAgent, MOZILLA)) {fileName = URLEncoder.encode(fileName, "UTF-8");}response.reset(); // 清空responseresponse.setContentType(XLSX_CONTENT_TYPE);response.setHeader("content-disposition", "attachment;filename=" + fileName);response.setCharacterEncoding("UTF-8");// 文件流输出try {workbook.write(response.getOutputStream());} catch (IOException e) {throw new IOException("could not write to response. cause: ", e);} finally {if (workbook != null) {workbook.close();}}}// 详见ExcelUtils.java

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 对接Bigo海外广告平台收益接口Reporting API

今天对接的是Bigo广告reporting api接口&#xff0c;拉取广告收益回来自己做统计。记录分享给大家 首先是文档地址,进入到BIGO后台就能看到文档地址以及参数&#xff1a; 文档地址&#xff1a;https://www.bigossp.com/guide/sdk/reportingApi/doc?type1 接入这些第三方广告…

JS高级_数据类型

undefined与null的区别? undefined代表没有赋值null代表赋值了, 只是值为null // 1. undefined与null的区别?var a1var a2 nullconsole.log(a1, a2)什么时候给变量赋值为null呢? var a null //已经确定a是一个对象, 但还没具体赋值&#xff08;开始&#xff09;a null …

高性能 数据库连接池 HikariCP | MySQL 最佳性能实践

👀 上节回顾:前面几节中,我们了解了 HikariCP 配置及连接池大小误区。 👉 本节目标:实战!!! HikariCP + MySQL 最佳性能配置!!! 常用的 MySQL 数据库与 HikariCP 进行优化配置,可以达到最佳性能! MySQL 配置 为了获得 MySQL 的最佳性能,我们需对一些配置进行优化。…

前端面试 ===> 【ES6】

ES6 前端面试题总结 1. ES6新特性 新增声明命令let、const&#xff1a; let、const 都是块级作用域&#xff0c;以 {} 代码块作为作用域范围&#xff0c;只能在代码块里面使用&#xff1b;不存在变量提升&#xff0c;只能先声明后使用&#xff0c;否则会报错&#xff0c;语法…

二,几何相交---4,BO算法---(3)数据结构

数据结构分两块&#xff0c;一个是某一时间状态的局部相交线段。一个是事件队列&#xff0c;是某一时刻局部相交线段的集合。

Vue2 父子组件某一属性的双向绑定

原本&#xff1a;父组件使用props传值给孩子组件初始化&#xff0c;触发事件子组件使用$emit传值给父组件&#xff0c;很麻烦后来&#xff1a;使用computed和$event例子代码&#xff1a; <template><div class"box">grandpa <el-input v-model"…

STM32平替GD32有多方便

众所周知, GD32一直模仿STM32,从未被超越。 我最近公司使用的GD32E230C6T6 这款芯片有48个引脚。 属于小容量的芯片。 我有一个用STM32写的代码,之前是用的 STM32F103CB 这款芯片是中容量的。 不过在keil中,只需要这两步,就能使用原来的逻辑,几乎不用修改代码。 1. …

华为组网:核心交换机旁挂防火墙,基于ACL重定向配置实验

如图所示&#xff0c;由于业务需要&#xff0c;用户有访问Internet的需求。 用户通过接入层交换机SwitchB和核心层交换机SwitchA以及接入网关Router与Internet进行通信。为了保证数据和网络的安全性&#xff0c;用户希望保证Internet到服务器全部流量的安全性&#xff0c;配置重…

Linux开发:通过sendfile高效的拷贝文件数据

如果想要将一个文件的内容拷贝到另一个文件中,常规的做法是读取源文件,然后再把内容写入到目的文件中: #include <fstream> #include <iostream> #include <string> #include <vector>using namespace std;vector<string> readFile(const st…

2024年【安全生产监管人员】及安全生产监管人员模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【安全生产监管人员】及安全生产监管人员模拟考试题库&#xff0c;包含安全生产监管人员答案和解析及安全生产监管人员模拟考试题库练习。安全生产模拟考试一点通结合国家安全生产监管人员考试最新大纲及安全生…

jeecg 项目 springcloud 项目有一个模块 没加载进来 只需要 把这个模块放到 可以加载到模块的位置 刷新依赖

springcloud 项目有一个模块 没加载进来 只需要 把这个模块放到 可以加载到模块的位置 刷新依赖

C/C++蓝桥杯之解码问题

问题描述&#xff1a;小明有一串很长的英文&#xff0c;可能包含大写和小写字母。在这串字母中&#xff0c;有很多字母是连续且重复的。小明想了一个将这串字母表达的很短的办法。将连续的几个相同的字母写成“字母出现次数”的形式。例如&#xff1a;连续的5个a&#xff0c;即…

01-java入门了解--cmd命令、jdk、java的认识

cmd常用命令 java入门需要安装的环境 jdk。&#xff08;下载好jdk&#xff0c;并配置好环境&#xff09;idea。&#xff08;或者其他的编程工具&#xff09; jdk安装目录介绍 第一步&#xff1a;编写程序&#xff08;程序员写.java后缀的文件&#xff09; 第二步&#xff1a;…

设计模式 -- 2:策略模式

目录 总结部分&#xff1a;策略模式的优点部分代码部分 总结部分&#xff1a; 策略模式和简单工厂模式很像 区别在于 简单工厂模式 需求的是由工程创造的类 去给客户直接答案 而策略模式在于 我有主体 一个主体 根据策略的不同来进行不同的计算 我的主体就负责收钱 然后调度相…

day08-Mybatis入门

MyBatis 是一款优秀的 持久层 框架&#xff0c;用于简化 JDBC 的开发。 官网&#xff1a;https://mybatis.org/mybatis-3/zh/index.html 一、快速入门 1.1 Mybatis 操作数据库的步骤 准备工作(创建 springboot 工程、数据库表 user、实体类 User)引入 Mybatis 的相关依赖&…

(C语言)strcat函数详解与模拟实现与strncat函数详解

目录 1. strcat函数详解 1. strcat函数模拟实现 3. strcat函数的危险性 4. strncat函数详解 4.1 strncat函数的特殊情况验证 1. strcat函数详解 头文件<string.h> 该函数是用来对字符串末尾追加字符串的&#xff0c;有两个参数&#xff0c;destination是要被追加的字…

强缓存和协商缓存的区别?

协商缓存和强缓存是 HTTP 缓存机制中的两种不同的策略&#xff0c;用于减少网络请求并提高网页加载速度。它们之间的主要区别在于缓存的验证方式和服务器返回的响应头。 强缓存&#xff1a; 强缓存是基于过期时间&#xff08;Expires&#xff09;和缓存标识&#xff08;Cache…

Sklearn支持向量机

支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种常用的分类算法&#xff0c;它可以用于解决二分类和多分类问题。在Python中&#xff0c;你可以使用Sklearn库来实现SVM。下面是一个简单的例子&#xff0c;展示了如何使用Sklearn进行SVM分类。 # 导入必要…

sourceComponent、onStatusChanged

sourceComponent 在 QML 的 Loader 元素中&#xff0c;sourceComponent 属性用于指定要加载和实例化的组件。与 source 属性不同&#xff0c;sourceComponent 属性直接引用一个已经定义好的组件&#xff0c;而不是通过文件路径或 URL 来加载。 以下是一个示例&#xff0c;展示…

SpringBoot+Vue项目报错(问题已解决)

1、错误日志 2、分析原因&#xff1a; JWT strings must contain exactly 2 period characters. Found: 0 JWT字符串必须包含2个句号字符。发现:0 分析&#xff1a;可以判断出大概可能是token格式出现了问题 3、参考 http://t.csdnimg.cn/hfEiY 4、检查后端代码是否出现问…