乐趣区

关于前端:SpringBoot动态生成多个Excel文件以压缩包zip格式下载

前言

文件下载的场景很多(还不是需要丰盛嘛~),那么什么是动静生成文件呢,就是用户抉择文件内容,服务器端依据抉择的数据生成某个格局的文件而后下载到客户端。单个码间接下载,多个打包下载咯!

我的项目场景

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

解决步骤

根本实现如下:

  1. 生成文件
  2. 保留到长期目录 || 缓存到内存中
  3. 将文件打包下载

我不想废话了,上代码:

间接把文件输入放逐到压缩流 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;    }

一些实际总结,欢送斧正!

退出移动版