zoukankan      html  css  js  c++  java
  • 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文件,上传七牛云的我就不写出来了,要是需要上传七牛云的步骤,可以留言.

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

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

  • 相关阅读:
    JeePlus:代码生成器
    JeePlus:API工具
    Java实现 洛谷 P1023 税收与补贴问题
    Java实现 洛谷 P1023 税收与补贴问题
    Java实现 洛谷 P1023 税收与补贴问题
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
  • 原文地址:https://www.cnblogs.com/chenchengxuyuan/p/14374057.html
Copyright © 2011-2022 走看看