public void batchDownload(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=压缩.zip");
ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
//key="文件名" value="文件地址"
Map<String, String> pictureMap = new HashMap<>();
Map<String, InputStream> isMap = getStringInputStreamMap(pictureMap);
//XSSFWorkbook wb = new XSSFWorkbook();
//ZipEntry entry = new ZipEntry("xxx.xls");
//zipOut.putNextEntry(entry);
//ByteArrayOutputStream bos = new ByteArrayOutputStream();
//wb.write(bos);
//bos.writeTo(zipOut);
isMap.forEach((fileName, is) -> {
addToZip(is, zipOut, fileName);
});
zipOut.flush();
zipOut.close();
}
/*处理文件*/
private Map<String, InputStream> getStringInputStreamMap(Map<String, String> pictureMap) {
Map<String, InputStream> isMap = new HashMap();
for (Map.Entry<String,String> entry: pictureMap.entrySet()) {
String[] fileNameParts = entry.getValue().split("/");
String fileName = entry.getKey()+fileNameParts[fileNameParts.length - 1];
try {
URL url = new URL(entry.getValue());
URLConnection con = url.openConnection();
// 设置超时间为3秒
con.setConnectTimeout(3 * 1000);
// 防止屏蔽程序抓取而返回403错误
con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
InputStream is = con.getInputStream();
isMap.put(fileName, is);
} catch (Exception e) {
e.printStackTrace();
}
}
return isMap;
}
/*添加压缩文件*/
private void addToZip(InputStream is, ZipOutputStream zipOut, String fileName) {
try{
ZipEntry entry = new ZipEntry(fileName);
zipOut.putNextEntry(entry);
int len;
byte[] buffer = new byte[1024];
while ((len = is.read(buffer)) > 0) {
zipOut.write(buffer, 0, len);
}
zipOut.closeEntry();
is.close();
}catch (Exception e){
e.printStackTrace();
}
}