当前方式:边压缩边下载,不需要创建暂存区
package com.itmck.util;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.UUID;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Slf4j
public class HttpDownUtil {
private static final int BUFFER = 1024;
private static final String SUFFIX = ".zip";
/**
* 浏览器批量下载
*
* @param response
* @param fileList 文件集合
* @return
*/
public static boolean downFileZip(HttpServletResponse response, List<File> fileList) {
boolean flag = true;
response.reset();
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
String strZipPath = UUID.randomUUID() + SUFFIX;
//不同浏览器需要处理乱码,这里写一个,需要处理自行百度
response.setHeader("Content-Disposition", "attachment;fileName=" + new String(strZipPath.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8));
try (
ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
DataOutputStream os = new DataOutputStream(zipOutputStream)
) {
zipOutputStream.setMethod(ZipOutputStream.DEFLATED);
if (CollectionUtils.isNotEmpty(fileList)) {
for (File file : fileList) {
zipOutputStream.putNextEntry(new ZipEntry(file.getName()));
FileInputStream fis = new FileInputStream(file);
int len;
byte[] b = new byte[BUFFER];
while ((len = fis.read(b)) != -1) {
os.write(b, 0, len);
}
fis.close();
}
}
} catch (Exception e) {
log.error("压缩失败", e);
flag = false;
}
return flag;
}
}