直接上代码
// 假设files是一个List<String>,包含了所有待打包文件的路径
List<String> files = ...;
try (ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) {
byte[] buffer = new byte[8192];
for (String filePath : files) {
File file = new File(filePath);
if (!file.exists() || !file.isFile()) continue; // 如果文件不存在或不是文件类型,则跳过
// 使用文件路径作为ZipEntry的名称(可按需调整命名逻辑)
ZipEntry zipEntry = new ZipEntry(file.getName());
zos.putNextEntry(zipEntry);
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
int len;
while ((len = bis.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
}
zos.closeEntry();
}
zos.finish();
} catch (IOException ex) {
logger.error("文件下载失败", ex);
throw ex;
}
自定义下载zip中文名称使用这个
response.setContentType("application/zip");
response.setCharacterEncoding("utf-8");
// URL编码文件名并设置Content-Disposition头
String encodedFileName = URLEncoder.encode('压缩文件名称', "utf-8").replaceAll("\\+", "%20");
response.setHeader("Content-Disposition", "attachment; filename=" + encodedFileName);
前端