场景:

  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临时文件,并将临时文件上传到腾讯云上的更多相关文章

  1. 将java打jar包成linux后台服务service

    将java打jar包成linux后台服务service 第一步:将java程序打成jar包 build.gradle配置文件中加spring-boot-gradle-plugin插件,具体配置如下(配 ...

  2. .NET 使用自带 DI 批量注入服务(Service)和 后台服务(BackgroundService)

    今天教大家如何在asp .net core 和 .net 控制台程序中 批量注入服务和 BackgroundService 后台服务 在默认的 .net 项目中如果我们注入一个服务或者后台服务,常规的 ...

  3. Docker-生成镜像、服务搭建(redis集群、kibana、运行项目jar包)、上传镜像至阿里云

    目录 生成自己的镜像 1.下载官方tomcat镜像 2.运行镜像后将webapp目录里新增文件(官方镜像是没有页面的 具体操作见) 3.使用docker ps -a 查看刚刚修改后的容器id 4.执行 ...

  4. 在腾讯云上把Laravel整合万向优图图片管理能力,打造高效图片处理服务

    推荐理由: 现如今数据爆炸性增长,人类生活产出的数据越来越多,文字信息,图片信息,视频信息:但有很多信息我们都无法直接使用,需通过一定的处理,才能够获取其中对我们有用的信息,在腾讯云上的万向优图能够对 ...

  5. maven工程 java 实现文件上传 SSM ajax异步请求上传

    java ssm框架实现文件上传 实现:单文件上传.多文件上传(单选和多选),并且用 ajax 异步刷新,在当前界面显示上传的文件 首先springmvc的配置文件要配置上传文件解析器: <!- ...

  6. java连接腾讯云上的redis

    目录 腾讯云上的配置 redis连接单机和集群 依赖 pom.xml redis参数的配置文件 遗留问题 腾讯云上的配置 在安全组上打开相关的端口即可 "来源" 就是你的目标服务器 ...

  7. bootstrap上传表单的时候上传的数据默认是0 一定要小心

    bootstrap上传表单的时候上传的数据默认是0 一定要小心

  8. Git安装及密钥的生成并上传本地文件到GitHub上

    之前用的GitHub,不太熟练,一直在上传的过程中遇到了一些问题,看了网上诸多教程,总觉得很乱,特参考一些资料,总结了一篇完整的操作步骤,从下载安装到上传文件,亲测有效 1.下载Git软件:https ...

  9. Android : App客户端与后台服务的AIDL通信以及后台服务的JNI接口实现

    一.APP客户端进程与后台服务进程的AIDL通信 AIDL(Android Interface definition language-“接口定义语言”) 是 Android 提供的一种进程间通信 ( ...

随机推荐

  1. HTTPS与HTTP区别

    HTTP + 加密 + 认证 + 完整性保护 = HTTPS http的全称是Hypertext Transfer Protocol Vertion (超文本传输协议) HTTPS: HTTPS(Se ...

  2. Qt 连接MySQL

    工程文件 QT += sql 举例 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName(&q ...

  3. vue -全局组件和局部组件

    1.全局组件:Vue.component('标签名', 构造器名) Vue.component('mycpn', cpnC) 注:这种注册组件的方式是全局组件,可以在多个Vue实例中使用. 2.局部组 ...

  4. linux ssh免密

    1.ssh-keygen -t rsa 生产密钥 2.ssh-copy-id 192.168.44.10 发布密钥  

  5. CentOS用yum安装MySQL 8.0 .

    先说一句,fuck,搞了一下午. 步骤:一:安装yum源: 1.wget https://dev.mysql.com/get/mysql80-community-release-el6-3.noarc ...

  6. Redis 3.2.x版本 redis.conf 的配置文件参数详解

    [root@web01 blog]# egrep -v"#|^$" /application/redis/conf/6379.conf bind127.0.0.1 #绑定的主机地址 ...

  7. Codeforces Round #304 (Div. 2)(CF546D) Soldier and Number Game(线性筛)

    题意 给你a,b(1<=b<=a<=5000000)表示a!/b!表示的数,你每次可以对这个数除以x(x>1且x为这个数的因子)使他变成a!/b!/x, 问你最多可以操作多少次 ...

  8. IDEA优秀插件分享之---Mybatis Log Plugin

    小伙伴们在使用mybatis的时候有时候会出现一些sql异常,这个时候就需要对执行的sql语句进行检查.然而mybatis一般使用log4j打印执行的sql语句,类型下面这种的: 这个时候如果sql语 ...

  9. 201871010106-丁宣元 《面向对象程序设计(java)》第八周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第八周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...

  10. JDOJ 1790: 高精度A-B

    JDOJ 1790: 高精度A-B JDOJ传送门 洛谷 P2142 高精度减法 洛谷传送门 题目描述 高精度减法 输入格式 两个整数a,b(第二个可能比第一个大) 输出格式 结果(是负数要输出负号) ...