使用hutool工具导出excel,使用jodd工具压缩流,使用oss上传流
最近写了一个业务,用到一些比较实用的工具记录下。
List<RobotCard> robotCardList = null;
if (BizRouteEnum.ROUTE_1.getRouteCode().equals(param.getExportModel())){ //1按条件导出,否则按给定数据导出
RobotCard robotCardParam = BeanUtil.toBean(map, RobotCard.class);
robotCardList = this.searchList(robotCardParam);
} else {
List<Long> ids = param.getIds();
RobotAssert.notNull(ids, "请选择需要导出的数据。");
robotCardList = this.selectBatchIds(ids);
} RobotAssert.notNull(robotCardList, "无有效数据。"); ArrayList<Map<String, Object>> rows = new ArrayList<>();
robotCardList.forEach(rc -> {
Map<String, Object> col = new LinkedHashMap<>();
col.put("编号", rc.getId().toString());
col.put("金额", rc.getCardAmount());
col.put("密码", rc.getPayPasswd());
rows.add(col);
}); ExcelWriter excelWriter = ExcelUtil.getWriter();
excelWriter.setColumnWidth(0, 30);
excelWriter.write(rows); ByteArrayOutputStream baos = new ByteArrayOutputStream();
excelWriter.flush(baos);
excelWriter.close(); ByteArrayOutputStream bos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(bos, Charset.defaultCharset()); //添加xls
try {
jodd.io.ZipUtil.addToZip(zos, baos.toByteArray(), "制卡数据.xls", "制卡数据");
} catch (Exception e1) {
LOGGER.error("文件压缩失败。", e1);
} robotCardList.forEach(card -> {
//生产二维码
QrConfig config = new QrConfig(300, 300);
config.setCharset(Charset.forName("utf-8"));
String cardId = card.getId().toString(); byte[] data = QrCodeUtil.generatePng(cardId, config); //压缩
try {
jodd.io.ZipUtil.addToZip(zos, data, cardId.concat(CommonConstant.PNG), cardId);
} catch (Exception e) {
LOGGER.error("文件压缩失败。", e);
}
}); try {
zos.finish();
zos.close();
} catch (Exception e) {
LOGGER.error("压缩流关闭失败。", e);
} //上传
ByteArrayInputStream in = new ByteArrayInputStream(bos.toByteArray());
String url = oSSClientUtil.putObjectForInputStream(
OssConstant.PAYMENT_TEMP.concat(DateUtil.format(DateUtil.date(),
DatePattern.PURE_DATETIME_PATTERN)).concat(CommonConstant.PNG), in);
使用hutool工具导出excel,使用jodd工具压缩流,使用oss上传流的更多相关文章
- Workbook导出excel封装的工具类
在实际中导出excel非常常见,于是自己封装了一个导出数据到excel的工具类,先附上代码,最后会写出实例和解释.支持03和07两个版本的 excel. HSSF导出的是xls的excel,XSSF导 ...
- 导入导出Excel的Java工具类ExcelUtil
在编写ExcelUtil之前,在网上查了一些资料.java中用来处理Excel的第三方开源项目主要就是POI和JXL.poi功能强大,但是比较耗资源,对于大数据量的导入导出性能不是太好:jxl功能简单 ...
- 分享一个FileUtil工具类,基本满足web开发中的文件上传,单个文件下载,多个文件下载的需求
获取该FileUtil工具类具体演示,公众号内回复fileutil20200501即可. package com.example.demo.util; import javax.servlet.htt ...
- redisTemplate实现轻量级消息队列, 异步处理excel并实现腾讯云cos文件上传下载
背景 公司项目有个需求, 前端上传excel文件, 后端读取数据.处理数据.返回错误数据, 最简单的方式同步处理, 客户端上传文件后一直阻塞等待响应, 但用户体验无疑很差, 处理数据可能十分耗时, 没 ...
- 能不能支持在线查看word,excel这样的文件?还有拖拽上传功能?
https://forum.enhancer.io/topic/5adea0cdce69735af635fcd8 方法1. 用一个自定义窗口, 自定义窗口里放一个iframe 假设你的 word 的地 ...
- NPOI操作EXCEL(四)——反射机制批量导出excel文件
前面我们已经实现了反射机制进行excel表格数据的解析,既然有上传就得有下载,我们再来写一个通用的导出方法,利用反射机制实现对系统所有数据列表的筛选结果导出excel功能. 我们来构想一下这样一个画面 ...
- springmvc 导出excel
1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...
- ArcGis使用字段别名Alias Name导出Excel
在ArcMap10.3+(根据官网描述应该是,作者测试使用10.5,可行)以后的版本,可以使用ArcToolbox工具导出Excel. 工具位置ConversionTools——Excel——Tabl ...
- 如何用poi生成导出excel
import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Sheet; import java. ...
随机推荐
- mysql基础之mysql主从架构
一.概念 主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从架构来搭建 二 ...
- Qt 中英文切换
一.前言 软件面向不同国籍用户时,需要显示不同语言的操作界面,Qt提供语言家可翻译为不同语言类型,方便软件走向国际化. 二.功能实现 1.翻译文件制作 1)在pro文件中添加生成中英文翻译过渡文件(. ...
- nmap扫描端口导致线上大量Java服务FullGC甚至OOM
nmap扫描端口导致线上大量Java服务FullGC甚至OOM 最近公司遇到了一次诡异的线上FullGC保障,多个服务几乎所有的实例集中报FullGC,个别实例甚至出现了OOM,直接被docker杀掉 ...
- pika详解(四) channel 通道
pika详解(四) channel 通道 本文链接:https://blog.csdn.net/comprel/article/details/94662394 版权 channel通道 通道 ...
- 201871030138-杨蕊媛 实验二 个人项目—《D{0-1}背包问题》项目报告
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...
- SLAM图优化g2o
SLAM图优化g2o 图优化g2o框架 图优化的英文是 graph optimization 或者 graph-based optimization, "图"其实是数据结构中的gr ...
- RISC-V与DSA计算机架构
RISC-V与DSA计算机架构 相信所有和计算机体系结构打过交道的朋友们都看过David Patterson与John Hennessy的煌煌巨作,<计算机体系架构:量化研究方法>.两位在 ...
- Numba实时变量分析
Numba实时变量分析 Numba使用引用计数进行垃圾回收,这是一种需要编译器配合的技术.Numba IR对必须插入decref的位置进行编码.这些位置通过实时变量分析确定.相应的源代码是https: ...
- GitHub上开源的YOLOv5
GitHub上开源的YOLOv5 代码地址:https://github.com/ultralytics/YOLOv5 该存储库代表Ultralytics对未来的对象检测方法的开源研究,并结合了我们在 ...
- 使用NVIDIA A100 TF32获得即时加速
使用NVIDIA A100 TF32获得即时加速 NVIDIA A100带来了我们公司历史上最大的单代性能增长.这是一个新的结构创新,这是一个多功能的支持,这是一个多功能的结构支持.TF32是用于深度 ...