场景:

  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 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标签,即可

下载

 

 

7.实现xlsx预览

https://www.cnblogs.com/sxdcgaq8080/p/12097835.html

 

查看原文