【POI】java服务生成List数据集合,后台服务生成xlsx临时文件,并将临时文件上传到腾讯云上
场景:
java服务生成List数据集合,后台服务生成xlsx临时文件,并将临时文件上传到腾讯云上
注意:
如果生成的xlsx文件是超大的xlsx文件,可以采用阿里的easyExcel方案
https://www.cnblogs.com/sxdcgaq8080/p/11791832.html
今日份代码:
1.先是一个变量,作为文件名
private static final String UPLOAD_TEMP_FILE_NAME = "商品数据.xlsx";
2.核心方法:
//3.获取查询结果
List<结果类> result = exportDataService.searchData(recordKey);
//4.生成xlsx文件
File xlsxFile = createXlsxFile(result);
//5.上传腾讯云(自己封装调用腾讯云提供的接口)
String foreverUrl = offlineSchemePromotionService.uploadAndGetDownloadUrl(xlsxFile);
3.核心思想:
1.查询数据库或者什么,获取List<> 结果集
2.将结果集,生成xlsx文件,并将文件作为临时文件保存在服务器端【这里取的是项目的根目录作为 临时目录】
3.然后将临时文件 上传至 云服务器上,最后,删除掉服务器端的 临时文件
4.生成xlsx文件
/**
* 生成xlsx文件
* @param list
* @return
* @throws IOException
*/
private File createXlsxFile(List<ProSkuSearchInfoDisplay> list) throws IOException{ XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("商品数据"); XSSFFont font = workbook.createFont();
font.setBold(true);
font.setFontHeightInPoints((short) 15); XSSFCellStyle style = workbook.createCellStyle();
style.setFillBackgroundColor(HSSFColor.RED.index);
style.setFillPattern(XSSFCellStyle.LEAST_DOTS);
style.setFont(font); Row row = sheet.createRow(0);
row.setHeight((short) (500));
Cell cell;
int cellNum = 12;
for (int i = 0; i < cellNum; i++) {
cell = row.createCell(i);
sheet.setColumnWidth(i, 6000);
cell.setCellValue(getCellValue(i,null,true));
cell.setCellStyle(style); } for (int i = 0; i < list.size(); i++) {
row = sheet.createRow(i+1);
ProSearchInfoDisplay proSearchInfoDisplay = list.get(i);
for (int i1 = 0; i1 < cellNum; i1++) {
cell = row.createCell(i1);
cell.setCellValue(getCellValue(i1,proSearchInfoDisplay,false));
}
} String filePath = getFilePath();
File file = new File(filePath);
if (!file.exists()){
file.createNewFile();
}
FileOutputStream outputStream = new FileOutputStream(filePath);
workbook.write(outputStream);
outputStream.close(); return file;
} private String getCellValue(int cellNum,ProSearchInfoDisplay display,boolean isHead){
String result = "";
switch (cellNum){
case 0: result = isHead ? "商品ID" : String.valueOf(display.getId()); break;
case 1: result = isHead ? "物料编码" : display.getMatnrCode(); break;
case 2: result = isHead ? "商品名称" : display.getName(); break; default: result = "";
}
if (StringUtils.isBlank(result)){
result = "";
} return result;
} /**
* 获取临时文件路径
* @return
*/
private String getFilePath(){
String path = ProExportDataJob.class.getResource("/").getPath()+UPLOAD_TEMP_FILE_NAME; return path;
}
5.上传腾讯云(自己封装调用腾讯云提供的接口)
@Override
public String uploadAndGetDownloadUrl(File file) { String foreverUrl = null;
if (file.exists()){
String fileName = file.getName();
foreverUrl = dmallCosHelper.uploadAndGetDownloadUrl(file, fileName);
file.delete();//即刻删除(删除服务器上生成的临时文件)
}
return foreverUrl;
}
6.上传得到的url直接提供在页面的a标签,即可
<a href="写自己的URL地址即可 http://******">下载</a>
7.实现xlsx预览
https://www.cnblogs.com/sxdcgaq8080/p/12097835.html
【POI】java服务生成List数据集合,后台服务生成xlsx临时文件,并将临时文件上传到腾讯云上的更多相关文章
- 将java打jar包成linux后台服务service
将java打jar包成linux后台服务service 第一步:将java程序打成jar包 build.gradle配置文件中加spring-boot-gradle-plugin插件,具体配置如下(配 ...
- .NET 使用自带 DI 批量注入服务(Service)和 后台服务(BackgroundService)
今天教大家如何在asp .net core 和 .net 控制台程序中 批量注入服务和 BackgroundService 后台服务 在默认的 .net 项目中如果我们注入一个服务或者后台服务,常规的 ...
- Docker-生成镜像、服务搭建(redis集群、kibana、运行项目jar包)、上传镜像至阿里云
目录 生成自己的镜像 1.下载官方tomcat镜像 2.运行镜像后将webapp目录里新增文件(官方镜像是没有页面的 具体操作见) 3.使用docker ps -a 查看刚刚修改后的容器id 4.执行 ...
- 在腾讯云上把Laravel整合万向优图图片管理能力,打造高效图片处理服务
推荐理由: 现如今数据爆炸性增长,人类生活产出的数据越来越多,文字信息,图片信息,视频信息:但有很多信息我们都无法直接使用,需通过一定的处理,才能够获取其中对我们有用的信息,在腾讯云上的万向优图能够对 ...
- maven工程 java 实现文件上传 SSM ajax异步请求上传
java ssm框架实现文件上传 实现:单文件上传.多文件上传(单选和多选),并且用 ajax 异步刷新,在当前界面显示上传的文件 首先springmvc的配置文件要配置上传文件解析器: <!- ...
- java连接腾讯云上的redis
目录 腾讯云上的配置 redis连接单机和集群 依赖 pom.xml redis参数的配置文件 遗留问题 腾讯云上的配置 在安全组上打开相关的端口即可 "来源" 就是你的目标服务器 ...
- bootstrap上传表单的时候上传的数据默认是0 一定要小心
bootstrap上传表单的时候上传的数据默认是0 一定要小心
- Git安装及密钥的生成并上传本地文件到GitHub上
之前用的GitHub,不太熟练,一直在上传的过程中遇到了一些问题,看了网上诸多教程,总觉得很乱,特参考一些资料,总结了一篇完整的操作步骤,从下载安装到上传文件,亲测有效 1.下载Git软件:https ...
- Android : App客户端与后台服务的AIDL通信以及后台服务的JNI接口实现
一.APP客户端进程与后台服务进程的AIDL通信 AIDL(Android Interface definition language-“接口定义语言”) 是 Android 提供的一种进程间通信 ( ...
随机推荐
- Vue.js 源码分析(九) 基础篇 生命周期详解
先来看看官网的介绍: 主要有八个生命周期,分别是: beforeCreate.created.beforeMount.mounted.beforeupdate.updated .beforeDes ...
- chattr lsattr文件隐藏属性
chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...] lsattr [-adlRvV][文件或目录...] 改变/显示文件隐藏属性 chatt ...
- JVM源码分析之MetaspaceSize和MaxMetaspaceSize的区别
JVM加载类的时候,需要记录类的元数据,这些数据会保存在一个单独的内存区域内,在Java 7里,这个空间被称为永久代(Permgen),在Java 8里,使用元空间(Metaspace)代替了永久代. ...
- 我的第一次diy装机记录——小白的配置篇
工欲善其事,必先利其器 相对于IT人来说,电脑是个好东西,应该是第二个除了手机陪伴我们最长的东西.今年4月份来的杭州,留下了那款陪我征战4年的笔记本,没有电脑,下班后的夜晚索然无味,身心的需求也日渐强 ...
- robotframework + appium实例
Open Application http://localhost:4723/wd/hub platformName=Android platformVersion=4.4.2 deviceName= ...
- 使用表格 代替 txt文件(未完结)
使用xlrd读取用户数据 首先创建一个xls文件 xlrd模块的简单使用 添加处理execl的接口: 使用excel生成测试报表
- how to design AWS SQS?
遇到这么一题system design,怎么做? 几个月以前,有同事提出要用Webapi代替现有的WCF,当时我投的反对票.而且我给了很充分的理由,不仅仅是时间不足,人手不够,更重要的是这个变化太大, ...
- CF1175D Array Splitting
题目链接 题意 给出一个长度为\(n\)的序列\(a\),要求分为恰好\(K\)段.第\(i\)个点的贡献是\(a_i \times f(i)\),\(f(x)\)表示x所属的是第几段. 思路 非常巧 ...
- Object.defineProperty 中的 writable 和 configurable 和 enumerable 的理解
在现在比较新的框架中, 比如 reactjs, vuejs中用得很多的一个属性便是 Object.defineOProperty 此属性的文档在网上一搜, 其中的几个属性, 包括 存取描述符(有set ...
- Spring Boot中的Mongodb多数据源扩展
在日常工作中,我们通过Spring Data Mongodb来操作Mongodb数据库,在Spring Boot中只需要引入spring-boot-starter-data-mongodb即可. 然后 ...