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

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

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

  • 相关阅读:
    Sql server之路 (三)添加本地数据库SDF文件
    Ps 之路 更改前景色
    wp7 xml
    安装程序在安装此软件包时遇到一个错误,这可能表示此软件包有错。错误码是29506
    WebService之路
    Wcf for wp8 上传图片到服务器,将图片名字插入数据库字段(五)
    C# 读取本地图片 转存到其他盘符
    如何在程序中执行动态生成的Delphi代码
    用 GetEnvironmentVariable 获取常用系统环境变量
    修改window.external使JS可调用Delphi方法
  • 原文地址:https://www.cnblogs.com/chenchengxuyuan/p/14374057.html
Copyright © 2011-2022 走看看