java poi对Excel文件加密,并下载

话不多说,直接上核心代码(只针对于XLSX):
获取Workbook就不搞代码,因个人而异。。。。
加密核心代码:

public static ByteArrayOutputStream encryptExcel(Workbook workbook,String password) throws IOException, InvalidFormatException, GeneralSecurityException{ByteArrayOutputStream baos = new ByteArrayOutputStream();workbook.write(baos);// 临时存储流到内存baos.flush();ByteArrayInputStream workbookInput = new ByteArrayInputStream(baos.toByteArray());// 创建POIFS文件系统 加密文件POIFSFileSystem fs = new POIFSFileSystem();EncryptionInfo info = new EncryptionInfo(fs, EncryptionMode.agile);Encryptor enc = info.getEncryptor();enc.confirmPassword(password);// 然后把字节输入到输入流,然后输入到OPC包里面OPCPackage opc = OPCPackage.open(workbookInput);OutputStream os = enc.getDataStream(fs);opc.save(os);opc.close();baos = new ByteArrayOutputStream();fs.writeFilesystem(baos);baos.flush();baos.close();return baos;}

下载代码

public static void writeExcelTwo(HttpServletResponse response,Workbook workbook, String filename, ByteArrayOutputStream byteArrayOutputStream) throws IOException {workbook.write(byteArrayOutputStream);byte[] bytes = byteArrayOutputStream.toByteArray();// 清空responseresponse.reset();// 设置response的Headerresponse.setContentType(HttpContentTypes.XLS+";charset=utf-8");response.addHeader("Content-Disposition", "attachment;filename=" + new String (filename.getBytes("utf-8"),"iso8859-1"));response.addHeader("Content-Length", "" + bytes.length);OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());outputStream.write(bytes);outputStream.flush();outputStream.close();}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部