• java如何拿到EasyExcel生成文件,上传到七牛云


    最近笔者遇到一个新需求,就是将一批数据进行导入数据库,但是要将校验不通过的数据生成一个Excel文件,放到七牛云上面,将地址返回前端,让前端自行下载.

    我相信一开始很多人都是直接生成文件,然后使用response相应回去给前端的,因为我的做法是一个借口实现导入与将失败的数据导出,所以使用response,前端就无法接收到Message进行提示导入成功多少条数据,失败多少条数据了,废话少说,先看看response响应回去是怎么操作的,上代码

    /**
         * 默认的样式设置
         *
         * @return 样式信息
         */
        public static HorizontalCellStyleStrategy excelStyleSet() {
            // 头的策略
            WriteCellStyle headWriteCellStyle = new WriteCellStyle();
            WriteFont headWriteFont = new WriteFont();
            headWriteFont.setFontHeightInPoints((short) 12);
            headWriteCellStyle.setWriteFont(headWriteFont);
            // 内容的策略
            WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
            WriteFont contentWriteFont = new WriteFont();
            // 字体大小
            contentWriteFont.setFontHeightInPoints((short) 10);
            contentWriteCellStyle.setWriteFont(contentWriteFont);
            return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
        }
    
    
        /**
         * 动态表头,动态数据,生成Excel文件
         * @param exportFilename 文件名
         * @param obj 表头
         * @param list 数据
         * @param sheetName sheet名称
         * @throws IOException
         */
        public void writeToExcel(String exportFilename, Class<?> obj, List<?> list, String sheetName) throws IOException {
            ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletResponse response = requestAttributes.getResponse();
            response.setContentType("application/vnd.ms-excel");
            response.addHeader("Cache-Control", "no-cache, no-store, must-revalidate");
            response.addHeader("Pragma", "no-cache");
            response.setCharacterEncoding("utf-8");
            String fileName = URLEncoder.encode(exportFilename, StandardCharsets.UTF_8.toString());
            response.setHeader("Content-Disposition", "attachment;filename="" + fileName + "";hrmInterface;" + "filename*=utf-8''" + fileName + ".xlsx");
            //response.getOutputStream()流 obj表头 excelStyleSet()表格样式 sheetNamesheet名称 list数据集合
            EasyExcel.write(response.getOutputStream(), obj).registerWriteHandler(excelStyleSet()).sheet(sheetName).doWrite(list);
        }

    通过上面代码,你会发现EasyExcel是将文件生成放到OutputStream流里面直接响应给前端的,所以这个时候我们无法在方法里面拿到文件,这个时候我们可以进入EasyExcel.write();里面看一下源码:

    接下来往下看:

    通过上面两个截图,我们可以看出来,EasyExcel是将文件生成了,那我们该如何在代码里面拿到生成的文件呢?接下来看新的代码段

    /**
         * 生成Excel文件放到七牛云
         * 动态表态,动态数据,生成Excel文件
         * @param exportFilename 文件名
         * @param obj 表头
         * @param list 数据
         * @param sheetName sheet名称
         * @param qiniuClient 七牛云引用
         * @return
         * @throws IOException
         */
        public static String createExcel(Class<?> obj, List<?> list, String sheetName,QiniuClient qiniuClient){
            ByteArrayOutputStream bos = new ByteArrayOutputStream();//字节流
            EasyExcel.write(bos, obj).registerWriteHandler(excelStyleSet()).sheet(sheetName).doWrite(list);
            //调用七牛云的上传方法,上传成功,七牛云会将地址返回
            String resultUrl = qiniuClient.upload(bos.toByteArray());
            System.out.println("水印文件上传七牛云成功返货resultUrl={}"+resultUrl);
            logger.info("水印文件上传七牛云成功返货resultUrl={}",resultUrl);
            return resultUrl;
        }

    剖析以上代码:

    OK.这个是如何通过EasyExcel动态生成Excel文件,上传七牛云的我就不写出来了,要是需要上传七牛云的步骤,可以留言.

    若有理解错误的地方,请指正哈.希望可以帮助到你们!

    记得转载的时候,加上来源.谢谢!

  • 相关阅读:
    BZOJ 1103 Poi2007 大都市meg
    BZOJ 2815 ZJOI2012 灾难
    【bzoj】1046: [HAOI2007]上升序列
    P1168跳房子(焫鷄如我)
    HAIO2017[打酱油的旅行!?]
    [haoi2013]花卉节
    P1298(矩阵切割)DP
    P1216 (list加强版)
    p1219最佳贸易(两边bfs写的)
    p1150[noip2013普及]表达式求值
  • 原文地址:https://www.cnblogs.com/chenchengxuyuan/p/14374057.html
Copyright © 2020-2023  润新知