直接上代码
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import lombok.Cleanup;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Slf4j
p
ublic class DownLoadUtil {
/**
* 批量下载
*/
public static void batchDownLoad(HttpServletResponse response, HttpServletRequest request, List<String> urlList, String packageName) {
// 临时存放地址
String templatePath = "xxx/xxx/xxx";
// 生成打包下载后的zip文件:Papers.zip,尽量随机性,避免重复(异常导致未删除)
String papersZipName = "yyy.zip";
// zip文件保存路径
String zipPath = templatePath + File.separator + papersZipName;
try {
@Cleanup
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipPath));
for (String url : urlList) {
// 获取文件名称
String fileName = url.substring(url.lastIndexOf("/") + 1);
out.putNextEntry(new ZipEntry(fileName));
// 写入压缩包
HttpResponse httpResponse = HttpRequest.get(url)
.execute();
byte[] bytes = httpResponse.bodyBytes();
out.write(bytes);
}
} catch (Exception e) {
e.printStackTrace();
}
try {
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/zip;charset=utf-8");
String userAgent = request.getHeader("User-Agent").toUpperCase();//获取浏览器名(IE/Chome/firefox)
response.setHeader("Content-Disposition", "attachment;filename=" + DownLoadUtil.browserFileName(userAgent, packageName) + ".zip");
//开始下载
@Cleanup
BufferedInputStream is = new BufferedInputStream(new FileInputStream(new File(zipPath)));
@Cleanup
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[1024];
int lenn = 0;
while ((lenn = is.read(buff, 0, buff.length)) != -1) {
out.write(buff, 0, lenn);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
File file = new File(zipPath);
file.delete();
}
}
public static String browserFileName(String browser, String fileName){
String result = "";
try {
if (browser.contains("CHROME")) {
// 谷歌
result = new String(fileName.getBytes(StandardCharsets.UTF_8), "ISO8859-1");
} else if ((browser.contains("FIREFOX"))) {
// firefox浏览器
result = new String(fileName.getBytes(StandardCharsets.UTF_8), "ISO8859-1");
} else if (browser.contains("MSIE") || browser.contains("TRIDENT")) {
// IE浏览器
result = URLEncoder.encode(fileName, "UTF-8");
}
} catch (Exception e){
log.info("DownLoadUtil-browserFileName: 异常,{}", e.getMessage());
}
return result;
}
}