SpringBoot实现zip文件下载
Controller实现zip文件下载
public void download(String tableName) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ZipOutputStream zip = new ZipOutputStream(byteArrayOutputStream); Map<String, String> map = generatorDomain.outputString(tableName); map.forEach((k, v) -> { try { zip.putNextEntry(new ZipEntry(k)); IoUtil.writeUtf8(zip, false, v); // 刷新缓冲区,一般写字符时用到,因为写字符时先进入缓冲区,然后将内存中的数据立刻写出(因为缓冲区是写满之后才会写出, 用flush()就不必等到缓冲区满,立刻写出)流对象还可以继续使用. zip.flush(); // 关闭当前 ZIP 条目并定位流以写入下一个条目 zip.closeEntry(); } catch (IOException e) { log.error("{} 表名,渲染模板失败" , tableName, e); } }); byte[] bytes = byteArrayOutputStream.toByteArray(); HttpServletResponse response = RequestContextHolderUtils.getResponse(); response.reset(); response.setContentType("application/octet-stream;charset=UTF-8"); response.setHeader("Content-Disposition" , "attachment; filename=" + tableName + ".zip"); response.addHeader("Content-Length" , "" + bytes.length); try (ServletOutputStream out = response.getOutputStream()) { IoUtil.write(out, true, bytes); } catch (IOException e) { log.error("{} 文件下载失败" , tableName, e); } }