多个文件根据下载地址压缩成zip下载
public void zipDownload(List<String> urlList, HttpServletResponse response) {
if (CollectionUtils.isEmpty(urlList)) {
return;
}
String zipFileName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + ".zip";
ServletOutputStream outputStream = null;
try {
zipFileName = new String(zipFileName.getBytes("UTF-8"),"ISO-8859-1");
response.setContentType("application/octet-stream;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;filename="+ zipFileName);
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
outputStream = response.getOutputStream();
ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);
for (String url : urlList) {
if (StringUtils.isBlank(url)) {
continue;
}
InputStream inputStream = this.HttpGetInputStream(url);
if (inputStream == null) {
continue;
}
zipOutputStream.putNextEntry(new ZipEntry(UUID.randomUUID() + ".pdf"));
BufferedInputStream bis = new BufferedInputStream(inputStream);
byte[] buffer = new byte[10 * 1024 * 1024];
int len;
while ((len = bis.read(buffer)) != -1) {
zipOutputStream.write(buffer, 0, len);
}
zipOutputStream.closeEntry();
bis.close();
inputStream.close();
}
zipOutputStream.flush();
zipOutputStream.close();
} catch (Exception e) {
log.error("压缩zip文件失败");
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public InputStream HttpGetInputStream(String GetUrl) {
HttpURLConnection connection = null;
InputStream io = null;
try {
connection = (HttpURLConnection) new URL(GetUrl).openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(30000);
connection.setReadTimeout(30000);
connection.connect();
int code = connection.getResponseCode();
if (!(code == 200)) {
return null;
}
io = connection.getInputStream();
return io;
} catch (Exception e) {
e.printStackTrace();
if (connection != null) {
connection.disconnect();
}
return null;
}
}