文件批量下载
实现下载代码:
/**
* @param urlList 文件下载地址列表
* @param packageName 压缩包名称
* @param templatePath 临时文件地址(注:根据实际情况,也可以不填写/去除该参数)
*/
public static void batchDownLoad(HttpServletResponse response
, HttpServletRequest request
, List<String> urlList
, String packageName
, String templatePath) {
//zip文件保存路径
String zipPath = templatePath + File.separator + packageName + ".zip";
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)
if (userAgent.contains("CHROME")) {
packageName = new String(packageName.getBytes("UTF-8"), "ISO8859-1");// 谷歌
} else if ((userAgent.contains("FIREFOX"))) {
packageName = new String(packageName.getBytes("UTF-8"), "ISO8859-1"); // firefox浏览器
} else if (userAgent.contains("MSIE")) {
// IE浏览器
packageName = URLEncoder.encode(packageName, "UTF-8");// IE浏览器
} else if (userAgent.contains("TRIDENT")) {
// ie
packageName = URLEncoder.encode(packageName, "UTF-8");// IE浏览器
}
response.setHeader("Content-Disposition", "attachment;filename=" + packageName + ".zip");
//开始下载
@Cleanup
BufferedInputStream is = new BufferedInputStream(new FileInputStream(new File(zipPath)));
@Cleanup
BufferedOutputStream outt = new BufferedOutputStream(response.getOutputStream());
// deviceCamera/test
byte[] buff = new byte[1024];
int lenn = 0;
while ((lenn = is.read(buff, 0, buff.length)) != -1) {
outt.write(buff, 0, lenn);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
File file = new File(zipPath);
file.delete();
}
}
接口调用代码:
@RequestMapping("/download")
public ResponseData download(HttpServletResponse response, HttpServletRequest request) {
List<String> urlList = new ArrayList<>();
String packageName = "HelloWorld";
DownLoadUtil.batchDownLoad(response, request, urlList, packageName, "");
return ResponseData.success();
}