【POI】java服务生成List数据集合,后台服务生成xlsx临时文件,并将临时文件上传到腾讯云上,并实现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

 

posted @ 2019-10-12 13:32  Angel挤一挤  阅读(1260)  评论(0编辑  收藏  举报