public void load(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
//压缩源文件路径
String zipSourcePath = ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("/") + "/resources/cache/";
File sourceFile = new File(zipSourcePath);
//生成的压缩文件路径
String zipFilePath = ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("/") + "/resources/zip/";
File zipPath = new File(zipFilePath);
if (!zipPath.exists()) {
zipPath.mkdirs();
}
File zipFile = new File(zipPath + File.separator + "资料.zip");
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
writeZip(sourceFile, "", zos);
//文件压缩完成后,删除被压缩文件
boolean flag = deleteDir(sourceFile);
File file = new File(ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("/") + "/resources/cache/");
if (!file.exists()) {//如果文件夹不存在
file.mkdir();//创建文件夹
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage(), e.getCause());
}
//发送zip文件
String readPath = ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("/") + "/resources/zip/资料.zip";
InputStream in = null;
OutputStream out = null;
response.setContentType("multipart/form-data");
response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("资料.zip", "UTF-8"));
try {
in = new FileInputStream(readPath);
int len = 0;
byte buffer[] = new byte[1024];
out = response.getOutputStream();
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
in.close();
}
out.close();
//删除压缩文件
boolean flag = deleteDir(new File(readPath));
}
}
private void writeZip(File file, String parentPath, ZipOutputStream zos) {
if (file.isDirectory()) {
//目录
parentPath += file.getName() + File.separator;
File[] files = file.listFiles();
for (File f : files) {
writeZip(f, parentPath, zos);
}
} else {
//文件
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
//指定zip文件夹
ZipEntry zipEntry = new ZipEntry(parentPath + file.getName());
zos.putNextEntry(zipEntry);
int len;
byte[] buffer = new byte[1024 * 10];
while ((len = bis.read(buffer, 0, buffer.length)) != -1) {
zos.write(buffer, 0, len);
zos.flush();
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage(), e.getCause());
}
}
}
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
//删除空文件夹
return dir.delete();
}