【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 提供的一种进程间通信 ( ...
随机推荐
- LeetCode——Department Highest Salary(花式使用IN以及GROUP BY)
The Employee table holds all employees. Every employee has an Id, a salary, and there is also a colu ...
- Spring Cloud Eureka的自我保护模式与实例下线剔除
之前我说明了Eureka注册中心的保护模式,由于在该模式下不能剔除失效节点,故按原有配置在实际中不剔除总感觉不是太好,所以深入研究了一下.当然,这里重申一下,不管实例是否有效剔除,消费端实现Ribbo ...
- 多线程学习笔记(二) BackgroundWorker 和 ProgressChanged
BackgroundWorker是在内部使用了线程池的技术:同时,在Winform 或WPF编码中,它还给工作线程和UI线程提供了交互的能力. Thread和ThreadPool默认都没有提供这种交互 ...
- 8.了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透?
作者:中华石杉 面试题 了解什么是 redis 的雪崩.穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透? 面试官心理分析 其实这是问到缓存必问的,因为缓 ...
- SQL注入:盲注
盲注简介 所谓的盲注就是在服务器没有错误回显的时候完成的注入攻击. 服务器没有错误回显,对于攻击者来说缺少了非常重要的"调试信息". 盲注分类 1.布尔盲注 布尔很明显Ture和F ...
- openstack Train版 “nova-status upgrade check”报错:Forbidden: Forbidden (HTTP 403)
部署openstack train版,在部署完nova项目时,进行检查,执行 nova-status upgrade check 返回报错信息如下: [root@controller ~]# nova ...
- 【java集合总结】-- ArrayList源码解析
一.前言 要想深入的了解集合就必须要通过分析源码来了解它,那如何来看源码,要看什么东西呢?主要从三个方面: 1.看继承结构 看这个类的继承结构,处于一个什么位置,不需要背记,有个大概的感觉就可以,我自 ...
- Ubuntu下部署Shipyard管理docker
使用k8s对于我这种新人来说,难度有点大.遂尝试使用Shipyard这个docker web ui工具来进行管理,以方便入门. 首先,我们还是需要在我们的主机上安装docker. 然后官方提供了自动安 ...
- MP的自动填充功能
用来进行自动填充时间. 使用注解@TableTield(fill=FieldFill.insert)插入时进行性填充 使用注解@TableTield(fill=FieldFill.Update)更新时 ...
- Nginx ServerName 配置说明
Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了.下面我就来说说server_name的使用吧:ser ...