EasyExcel 学习之 导出 “提示问题”

EasyExcel 学习之 导出 “提示问题”

  • 现象
  • 分析
  • 解决(伪代码)
    • 前端 POST 实现
    • 后端实现

现象

EasyExcel 支持导出 xlsxxlscsv 三种文件格式。在导出过程中可能发生各种异常,当发生异常时应该提示错误信息而非导出一个错误的文件。

分析

  • 首先,后端应该支持两种不同格式(content-type)内容的返回
  • 其次,前端应该支持两种不同格式(content-type)内容的解析处理

解决(伪代码)

前端 POST 实现

const axios = require('axios');axios({url: 'https://api.example.com/export',method: 'post',data: {param1: 'value1',param2: 'value2'},responseType: 'blob',headers: {'Authorization': 'Bearer YOUR_TOKEN'}
})
.then(response => {if (response.data && response.data.type == 'application/json') {const render = new FileReader();reader.onload = (e) => {let content = e.target.result;content = JSON.parse(content);this.$antMessage.info(content.msg);}} else {var blob = new Blob([response.data]);const url = window.URL.createObjectURL(blob);const link = document.createElement('a');link.style.display = 'none';link.href = url;link.setAttribute('download', name);document.body.appendChild(link);link.click();document.body.removeChild(link);}
})
.catch(error => {console.error('Error:', error);
});

后端实现

if (errorCondition) {throw new BusinessException('errorCode', 'errorMsg');
}response.setContentType(ExcelConst.MEDIA_TYPE_EXCEL);
response.setHeader(ExcelConst.CONTENT_DISPOSITION, String.format("%s:%s=%s.%s", ExcelConst.ATTACHMENT, ExcelConst.FILENAME, System.currentTimeMillis(), ExcelTypeEnum.XLSX.getValue()));try (OutputStream os = response.getOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream()) {ExcelWriter excelWriter = EasyExcel.write(baos).charset(Charset.forName("GBK")) // 或者 UTF-8.autoCloseStream(true).excludeColumnFieldNames(Lists.newArrayList()).excelType(ExcelTypeEnum.XLSX).build();WriteSheet writeSheet = EasyExcel.writerSheet(sheetNo, sheetName).head(clazz).build();excelWriter.write(sheetData, writeSheet);excelWriter.finish();os.write(baos.toByteArray());
} catch (Exception e) {log.error(String.format("Excel 导出失败!%s", ""), e);
}

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

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

相关文章

springBoot 自动配置与starter

目录 一、自动配置 Springboot实现自动配置的核心机制 Conditional的作用是什么? 如何自定义自动配置? 步骤 例子分析 自动配置的优先级 如何禁用特定的自动配置? 二、starter 如何理解Spring Boot中的starter? 如何自…

Json 类型与多值索引 — OceanBase 4.3.2 AP 功能体验

本文来自 2024年OceanBase技术征文大赛——“让技术被看见 | OceanBase 布道师计划”的用户征文。也欢迎更多的技术爱好者参与征文,赢取万元大奖。和我们一起,用文字让代码跳动起来! 参与2024年OceanBase技术征文大赛>> MySQL在5.7.8…

ORACLE建表(11G)

BEGIN EXECUTE IMMEDIATE DROP TABLE business CASCADE CONSTRAINTS; EXCEPTION WHEN OTHERS THEN IF SQLCODE ! -942 THEN -- 942 是表不存在的错误码 RAISE; END IF; END; CREATE TABLE business ( uuid VARCHAR2(255) NOT NULL, product VARCHAR2(255) NULL, promotion VARC…

Spark on YARN:Spark集群模式之Yarn模式的原理、搭建与实践

Spark 的介绍与搭建:从理论到实践-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交:本地与集群模式全解析-CSDN博客 目录 一、Spark on YARN 的优势 (一&#…

java后端工程师转行AI大模型岗,工作、自我提升两不误!

随着技术的不断进步,人工智能(AI)已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域,如Java,转向人工智能领域,今天小编和大家一起来探讨Java开发者是否可以转型到人工智能&a…

【系统设计】提升Kafka系统性能:Spring Boot实现Lag感知的生产者与消费者

在分布式系统中,消息队列扮演着至关重要的角色,而Kafka凭借其高吞吐量和低延迟的特性,成为了流数据处理的首选。然而,随着应用规模的扩大,如何有效管理Kafka的offset与lag,确保系统的高可用性和性能稳定&am…

通宵修bug

前两个月的某天凌晨,我司全新的一个营销工具,在全国如期上线。然而整个发布过程并非一帆风顺,在线上环境全量发布后,有同事观测到他所负责模块的监控曲线有异常!监控曲线在发布的时刻近乎于直线下跌。 经过初步排查&am…

Rust-宏编程

巴山楚水凄凉地,二十三年弃置身。 怀旧空吟闻笛赋,到乡翻似烂柯人。 沉舟侧畔千帆过,病树前头万木春。 今日听君歌一曲,暂凭杯酒长精神。 ——《酬乐天扬州初逢席上见赠》唐刘禹锡 【哲理】翻覆的船只旁仍有千千万万的帆船经过&a…

leetcode912.排序数组的题解

题目描述: 题目要求在不使用任何内置函数的情况下解决问题,时间复杂度为 O(nlog(n))。 笔者使用了快速排序,但是直接使用最原始的快速排序,有些特殊的测试用例会超时。 1)如果数组本身基本有序,则使用原始…

TikTok品牌出海:从“流量为王”到“价值为王”

随着市场竞争的加剧,品牌逐渐意识到,仅仅依靠流量已不足以在海外市场立足,必须实现从“流量为王”到“价值为王”的转变。本文Nox聚星将和大家探讨品牌如何与TikTok达人合作,在海外市场中建立长期稳定的品牌形象。 一、品牌出海的…

纯血鸿蒙系统 HarmonyOS NEXT自动化测试实践

1、测试框架选择 hdc:类似 android 系统的 adb 命令,提供设备信息查询,包管理,调试相关的命令ohos.UiTest:鸿蒙 sdk 的一部分,类似 android sdk 里的uiautomator,基于 Accessibility 服务&…

Kafka 可观测性最佳实践

Kafka 概述 Kafka 是由 LinkedIn 开发一个分布式的基于发布订阅模式的消息队列,是一个实时数据处理系统,可以横向扩展。与 RabbitMQ、RockerMQ 等中间件一样拥有几大特点: 异步处理服务解耦流量削峰 监控 Kafka 是非常重要的,因…

《XGBoost算法的原理推导》12-13树的叶子节点权重w和映射关系q 公式解析

本文是将文章《XGBoost算法的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。 我们重新定义一颗树,包括两个部分: 叶子结点的权重向量 w w w;实例 -> 叶子结点的映射关系 q q q(本质是树的…

电商API:开启电商新时代的关键钥匙

一、电商API:定义与发展 电商API,即应用程序编程接口,是连接不同软件系统的桥梁,在电商领域中发挥着至关重要的作用。电商API的发展历程可以追溯到20世纪90年代,当时电子商务刚刚兴起,企业开始意识到通过A…

多client向同一个pushgateway推送指标被覆盖问题

问题: 多个client向同一个pushgateway推送指标,每个client推送的指标名称相同但是lable不同。如下: # TYPE ObjectCount gauge ObjectCount{server_id"server1"} 4 ObjectCount{server_id"server2"} 4 ObjectCount{server_id"…

C++__XCode工程中Debug版本库向Release版本库的切换

Debug和Release版本分别设置编译后,就分别得到了对应的lib库,如下图: 再生成Release后如下图:

梧桐数据库中处理连续日期序列的解决方案

在数据库管理中,处理时间序列数据是一项常见的任务,尤其是在需要识别连续日期序列的场景中。例如,在一个生产环境中,我们可能需要跟踪产品的输出类型,并记录这些输出是否连续。本文将介绍如何在梧桐数据库中实现这一功…

增删改增删改

savePostMapping("/save") public ResponseResult save(RequestBody ChannelDto channelDto){ // 参数判断 if(channelDto null || StringUtils.isBlank(channelDto.getName())){ return ResponseResult.error(AppHttpCodeEnum.PARA…

消费疲软下,家居品牌如何利用营销实现新的突围与增长?

在消费疲软的大环境下,家居品牌面临着前所未有的挑战与机遇。尤其以耐消品为主的家居行业,也受到一定程度影响——有效需求不足导致产能过剩,营销乏力,市场竞争开始变得激烈,不少家居品牌正在面临业绩压力。家居品牌如…

Apache Shiro -配置先后的影响

在Apache Shiro框架中,shiroFilterChainDefinition(或filterChainDefinitions)的配置顺序确实有影响。以下是具体的影响和原因: URL匹配规则:Shiro在验证URL时,会按照filterChainDefinitions中配置的顺序进…