当前位置 : 主页 > 编程语言 > java >

SpringBoot动态生成多个Excel文件以压缩包.zip格式下载

来源:互联网 收集:自由互联 发布时间:2022-08-15
前言 文件下载的场景很多(还不是需求丰富嘛~),那么什么是动态生成文件呢,就是用户选择文件内容,服务器端根据选择的数据生成某个格式的文件然后下载到客户端。单个码直接

SpringBoot动态生成多个Excel文件以压缩包.zip格式下载_spring

前言

文件下载的场景很多(还不是需求丰富嘛~),那么什么是动态生成文件呢,就是用户选择文件内容,服务器端根据选择的数据生成某个格式的文件然后下载到客户端。单个码直接下载,多个打包下载咯!

项目场景

项目中有个数据导出excel的需求,而且是批量,那么就要打包咯

解决步骤

基本实现如下:

  • 生成文件
  • 保存到临时目录 || 缓存到内存中
  • 将文件打包下载
  • 我不想废话了,上代码:

    直接把文件输出流放到压缩流ZipOutputStream

    List<String> fields = new ArrayList<>(); fields.add("字段1"); fields.add("字段2"); fields.add("字段3"); HSSFWorkbook workbook = excelUtil.getNewExcel("压缩文件测试", fields); try { response.setContentType("application/zip; charset=UTF-8"); //返回客户端浏览器的版本号、类型 String agent = request.getHeader("USER-AGENT"); String downloadName = "压缩文件测试.zip"; //针对IE或者以IE为内核的浏览器: if (agent.contains("MSIE") || agent.contains("Trident")) { downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8"); } else { downloadName = new String(downloadName.getBytes("UTF-8"), "ISO-8859-1"); } response.setHeader("Content-disposition", "attachment;filename=" + downloadName); ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream()); //多个从这里就可遍历了 // --start ZipEntry entry = new ZipEntry("第一个文件名.xls"); zipOutputStream.putNextEntry(entry); ByteOutputStream byteOutputStream = new ByteOutputStream(); workbook.write(byteOutputStream); byteOutputStream.writeTo(zipOutputStream);// zipOutputStream.write(workbook.getBytes()); byteOutputStream.close(); zipOutputStream.closeEntry(); // --end zipOutputStream.close(); } catch (IOException e) { e.printStackTrace(); }

    生成excel文件也贴一下,如下:

    public static HSSFWorkbook getNewExcel(String formName, List<String> fields) { //新建excel对象 HSSFWorkbook workbook = new HSSFWorkbook(); //新建工作表 HSSFSheet sheet = workbook.createSheet(formName); // 设置表格默认列宽度为20个字节 sheet.setDefaultColumnWidth((short) 20); // 生成一个样式 HSSFCellStyle style = workbook.createCellStyle(); // 生成一个字体 HSSFFont font = workbook.createFont(); font.setFontHeightInPoints((short) 12); //字体应用到当前样式 style.setFont(font); //创建表格行 HSSFRow row = sheet.createRow(0); //设置表单名称 row.createCell(0).setCellValue(formName); if (fields.size() - 1 > 0) { //合并单元格 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, fields.size() - 1)); } HSSFRow row1 = sheet.createRow(sheet.getLastRowNum() + 1); //设置列标题行 for (int i = 0; i < fields.size(); i++) { row1.createCell(i).setCellValue(fields.get(i)); } return workbook; }


    上一篇:电商项目开源,教合集
    下一篇:没有了
    网友评论