@RequestMapping(value = "/downLoadImage", method = RequestMethod.GET)
public void downLoadImage(HttpServletResponse response, String id) throws Exception {
List<String> urls = Lists.newArrayList();
urls.add("http://a.hiphotos.baidu.com/image/pic/item/b219ebc4b74543a96a58c53112178a82b801148f.jpg");
Map<String, InputStream> isMap = Maps.newHashMap();
urls.forEach(urlStr -> {
String[] fileNameParts = urlStr.split("/");
String fileName = fileNameParts[fileNameParts.length - 1];
try {
URL url = new URL(urlStr);
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();
}
});
response.setContentType("application/octet-stream");
String filename = URLEncoder.encode("打包图片", "UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".zip");
ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
isMap.forEach((fileName, is) -> {
try {
addToZip(is, zipOut, fileName);
} catch (Exception e) {
e.printStackTrace();
}
});
zipOut.flush();
zipOut.close();
}
private void addToZip(InputStream is, ZipOutputStream zipOut, String fileName) throws IOException {
fileName = URLEncoder.encode(fileName, "UTF-8");
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();
}
window.location.href = 'path/downLoadImage?id=' + id;