【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 提供的一种进程间通信 ( ...
随机推荐
- logstash 入门篇
场景介绍 基于分布式集群海量日志数据,且分布在不同的服务器上,日志的采集以及可视化是需要我们解决的问题.ELK就是这么一个方案,当然我们这里主要讲解logstash安装配置和基础语法. ELK帮我们解 ...
- Oracle 11g 手工建库
假设数据库软件已经安装好,现在没有图形界面无法用dbca安装数据库,那么用手工建库,数据库名为edw 创建目录 [oracle@localhost ~]$ mkdir -p /u01/app/orac ...
- 数据挖掘--OPTICS
OPTICS是基于DBSCAN算法的缺陷提出来的一个算法. 核心思想:为每个数据对象计算出一个顺序值(ordering).这些值代表了数据对象的基于密度的族结构,位于同一个族的数据对象具有相近的顺序值 ...
- Linux(Centos7)搭建LAMP(Apache+PHP+Mysql环境)
目录 Linux搭建LAMP(Apache+PHP+Mysql环境)Centos7 一. 检查系统环境 1.确认centos版本 2.检查是否安装过apache 3.检查是否安装过Mysql 4.清理 ...
- FCOS及其和Faster R-CNN的区别
RetinaNet,SSD,YOLOv3,Faster R-CNN等都是Anchor-based的检测器,即需要预定义的Anchor boxes来进行训练.FCOS是一种Anchor-free和Pro ...
- jq中
1.jquery位置信息 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- 201871010118-唐敬博《面向对象程序设计(JAVA)》第十四周学习总结
博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 <<https://home.cnblogs.com/u/nwnu-daizh/>> 这个作业的要求在哪里 < ...
- LeetCode 669. Trim a Binary Search Tree修剪二叉搜索树 (C++)
题目: Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so th ...
- 快速调用Android虚拟机
由于使用Android studio开发flutter 每次打开软件都需要很长时间,所以我自己使用vscode进行开发,没有虚拟机也开发不了,于是就有了这篇博客的作用啦 在本地桌面新建一个xxx.ba ...
- 数据呈现到 ASP.NET Core MVC 中展示
终于要将数据呈现到 ASP.NET Core MVC 中的 视图 上了 将数据从控制器传递到视图的三种方法 在 ASP.NET Core MVC 中,有 3 种方法可以将数据从控制器传递到视图: 使用 ...