java批量下载文件打包压缩工具类,输出到浏览器下载,可以自己改名。
工具类:
入参 :文件LIst ;打包后的名字 ;响应到浏览器
/**
* 功能:压缩多个文件,输出压缩后的zip文件流
*
* @param srcfile:源文件列表
* @param zipFileName:压缩后的文件名
* @param response: Http响应
*/
public void zipFiles(List<File> srcfile, String zipFileName, HttpServletResponse response) throws IOException {
byte[] buf = new byte[1024];
// 获取输出流
BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
FileInputStream in = null;
ZipOutputStream out = null;
try {
response.reset(); // 重点突出
// 不同类型的文件对应不同的MIME类型
response.setContentType("application/x-msdownload");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + zipFileName + ".zip");
// ZipOutputStream类:完成文件或文件夹的压缩
out = new ZipOutputStream(bos);
for (int i = 0; i < srcfile.size(); i++) {
in = new FileInputStream(srcfile.get(i));
// 给列表中的文件单独命名
out.putNextEntry(new ZipEntry(srcfile.get(i).getName()));
int len = -1;
while ((len = in.read(buf)) != -1) {
out.write(buf, 0, len);
}
}
out.close();
bos.close();
log.info("压缩完成.");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) in.close();
if (out != null) out.close();
}
}
二:调用
zipFiles(files, zipName, response);