【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 提供的一种进程间通信 ( ...
随机推荐
- jQuery-ready与load
// ready 在DOM加载完成时运行的代码 $(document).ready(function(){ // 在这里写代码... }) // 可以简写为 $(function(){ // 在这 ...
- maven 学习---Maven项目文档
本教程将教你如何一步到位创建应用程序的文档.因此,让我们开始,到 C:/MVN 创建java应用程序consumerBanking. OpenconsumerBanking文件夹,然后执行以下命令m ...
- 什么是唯品会JIT业务
以销定采的模式,供应商将商品发给唯品会仓库在由唯品会发给客户:首先在唯品会创建档期绑定PO此时设置的商品库存为虚拟库存,之后供应商根据实际产生的有效订单将订单中的商品发给唯品会,最后再由唯品会发给用户 ...
- [b0015] python 归纳 (一)_python组织方式
结论: xxx.yyyy yyyy 可以是 类.类对象.函数.变量 xxx 可以是 包.模块.类 代码: ref1.py # -*- coding: utf-8 -*- import os class ...
- 当MySQL数据库遇到Syn Flooding
Syn攻击是最常见又最容易被利用的一种攻击手法,利用TCP协议的缺陷,发送大量伪造TCP连接请求,常用假冒的IP发来海量的SYN包,被攻击的服务器回应SYN+ACK,因为对方是假冒的IP,永远收不到包 ...
- 基于Docker实现MySQL主从复制
前言 MySQL的主从复制是实现应用的高性能,高可用的基础.对于数据库读操作较密集的应用,通过使数据库请求负载均衡分配到不同MySQL服务器,可有效减轻数据库压力.当遇到MySQL单点故障中,也能在短 ...
- 3.InfluxDB-InfluxQL基础语法教程--数据说明
下面是本次演示的示例数据 表名:h2o_feet 数据示例: 数据描述 : 表h2o_feet中所存储的是6分钟时间区间内的数据. 该表有一个tag,即location,该tag有两个值,分别为coy ...
- 转:oracle笔记
oracle笔记1 卸载oracle developer server的方法: 1-1 oracle卸载工具中卸载对应的oracleds项目:在注册表中搜索ORACLEDS HOME对应的别名,删除对 ...
- 【分布式搜索引擎】Elasticsearch之安装Elasticsearch可视化平台Kibana
一.Kibana简单介绍 Kibana 是为 Elasticsearch设计的开源分析和可视化平台.你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互.你 ...
- python基础语法20 面向对象5 exec内置函数的补充,元类,属性查找顺序
exec内置函数的补充 exec: 是一个python内置函数,可以将字符串的代码添加到名称空间中; - 全局名称空间 - 局部名称空间 exec(字符串形式的代码, 全局名称空间, 局部名称空间) ...