栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java客户端下载加密Excel

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java客户端下载加密Excel

分享一个关于下载加密excel的方法;
核心思想就是将workbook的数据流到内容,通过POIFSFileSystem进行包装加密,最终将数据流写到response流里面;

关于代码中的writer是引用hutool的操作excel的工具类;大家不必在此费脑哦

后续博主可以再写一个完整的demo

  @Override
    public boolean downloadExcel(ExcelWriter writer, String password, String fileName, String fileSuffix) {
        if (Objects.isNull(writer) || StringUtils.isAnyBlank( fileName, fileSuffix)) {
            log.error("ExcelServiceImpl downloadEncryptExcel params is null!");
            return false;
        }

        HttpServletResponse response = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getResponse();
        if (Objects.isNull(response)) {
            log.error("ExcelServiceImpl downloadExcel fail,response is null!");
            return false;
        }


        boolean result = false;
        ServletOutputStream out = null;

        try {
//            String finalFileName = String.valueOf(URLEncoder.encode(fileName + fileSuffix, "UTF-8"));
            String finalFileName = fileName + fileSuffix;
            response.setHeader("Content-Disposition", "attachment;filename=".concat(finalFileName));
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            out = response.getOutputStream();
            result = true;

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            Workbook workbook = writer.getWorkbook();
            // 临时存储流到内存
            workbook.write(baos);
            baos.flush();
            if (StringUtils.isNotBlank(password)) {
                ByteArrayInputStream workbookInput = new ByteArrayInputStream(baos.toByteArray());

                final POIFSFileSystem fs = new POIFSFileSystem();
                final EncryptionInfo info = new EncryptionInfo(EncryptionMode.standard);
                final Encryptor enc = info.getEncryptor();

                enc./confirm/iPassword(password);

                final OPCPackage opc = OPCPackage.open(workbookInput);
                final OutputStream os = enc.getDataStream(fs);
                opc.save(os);
                opc.close();

                baos = new ByteArrayOutputStream();
                fs.writeFilesystem(baos);
                baos.flush();
            }
            baos.writeTo(out);
            baos.close();
        } catch (Exception e) {
            log.error("ExcelServiceImpl downloadExcel error:{} :", e);
        } finally {
            if (null != out) {
                IoUtil.close(out);
            } else {
                writer.close();
            }
        }
        return result;
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/709744.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号