package com.vxdata.activity.utils;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class DownloadZipUtil {
public static void downloadZipFiles(HttpServletResponse response, List<String> srcFiles, String zipFileName) {
try {
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/zip");
zipFileName = new String(zipFileName.getBytes(), StandardCharsets.UTF_8);
response.setHeader("Content-Disposition", "attachment;filename=" + zipFileName);
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
zipFile(srcFiles, zos);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void zipFile(List<String> filePaths, ZipOutputStream zos) {
byte[] buffer = new byte[4096];
try {
for (String filePath : filePaths) {
File inputFile = new File(filePath);
if (inputFile.exists()) {
if (inputFile.isFile()) {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(inputFile));
zos.putNextEntry(new ZipEntry(inputFile.getName()));
int size = 0;
while ((size = bis.read(buffer)) > 0) {
zos.write(buffer, 0, size);
}
zos.closeEntry();
bis.close();
} else {
File[] files = inputFile.listFiles();
List<String> filePathsTem = new ArrayList<String>();
for (File fileTem : files) {
filePathsTem.add(fileTem.toString());
}
zipFile(filePathsTem, zos);
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != zos) {
try {
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}