问题:
业务代码:
Controller
@PostMapping("/batchDownload")
public void batchDownload(@RequestBody PassportDTO passportDTO, HttpServletResponse response) {
passportService.batchDownload(passportDTO, response);
}
Service
public void batchDownload(PassportDTO passportDTO, HttpServletResponse response) {
String zipName = "通行证" + ".zip";
response.setHeader("content-type", "application/octet-stream");
response.setHeader("Content-disposition", "attachment;filename=" + zipName);
response.setCharacterEncoding("utf-8");
ZipOutputStream zipOutputStream = null;
try {
zipOutputStream = new ZipOutputStream(response.getOutputStream());
for (String pictureUrl : passportDTO.getPictureUrls()) {
String fileName = pictureUrl.substring(pictureUrl.lastIndexOf("/") + 1);
zipOutputStream.putNextEntry(new ZipEntry(fileName));
URL url = new URL(pictureUrl);
InputStream inputStream = new DataInputStream(url.openStream());
byte[] buff = new byte[1024];
int len;
while ((len = inputStream.read(buff)) != -1) {
zipOutputStream.write(buff, 0, len);
}
zipOutputStream.closeEntry();
inputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (zipOutputStream != null) {
try {
zipOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
说明:
通过图片路径创建输入流获取图片数据:
File file = new File("/test/temp/vehicles/" + pictureUrl);
InputStream inputStream = new FileInputStream(file);
通过图片URL路径创建输入流获取图片数据:
URL url = new URL(pictureUrl);
InputStream inputStream = new DataInputStream(url.openStream());
路漫漫其修远兮,吾将上下而求索
译文:在追寻真理方面,前方的道路还很漫长,但我将百折不挠,不遗余力地去追求和探索。
如果您有什么好的想法与方法,欢迎在评论区留言,我们一起讨论~