SpringBoot实现zip文件下载
Controller实现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);
}
}
更多推荐
已为社区贡献3条内容
所有评论(0)