通过生成临时文件进行压缩打包下载
1.生成下载所需文件
根据自己情况,我是将字符串通过FileWriter在项目路径的static中直接生成文件
public static void createFile(String string,String path,String name) throws IOException{
File file=new File(path);
if(!file.exists()){//如果文件夹不存在
file.mkdirs();//创建文件夹
}
FileWriter fileWriter= null;
fileWriter = new FileWriter(path+File.separator+name);
fileWriter.write(string);
fileWriter.flush();
fileWriter.close();
}
2.生成一个临时zip压缩包,将所需文件读入压缩包
File fileZip = new File(AllPath.getZippath());
FileOutputStream outStream = new FileOutputStream(fileZip);
ZipOutputStream toClient = new ZipOutputStream(outStream);
Tool.compress(new File(AllPath.getFilePath()), toClient, "", true);
toClient.close();
outStream.close();
// 下载,并删除临时文件zip
Tool.downloadFile(AllPath.getFilename(),fileZip, response, true);
工具类如下:采用的递归,一个个读写,,有些路径由于手动拼接的可能要少斜线,容易压缩出来没文件层次!
/**
* 递归压缩方法
* @param sourceFile 源文件
* @param zos zip输出流
* @param name 压缩后的名称
* @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构;
* false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)