需求
将材料列表所勾选的材料批量打包压缩下载,每一项材料对应一个文件夹,每个文件夹下对应材料附件。
核心代码如下:
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
File file = new File("tmp" + File.separator + "测试.zip"); //新建压缩文件夹名称
File fileParent = file.getParentFile(); //父文件夹
if(!fileParent.exists()){ //如果父文件夹不存在则新建文件夹
fileParent.mkdirs();
}
if(!file.exists()){ //如果文件不存在,则新建文件
file.createNewFile();
}
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(file)); //建立压缩文件
zos.putNextEntry(new ZipEntry("aaa/aa.doc"));//建立aaa文件夹,并在下面生成aa.doc文件
zos.write(bos.toByteArray()); //将内容写入新加的aa.doc文件
zos.putNextEntry(new ZipEntry("bbb/bb.doc"));//建立bbb文件夹,并在下面生成bb.doc文件
zos.write(bos.toByteArray());//将内容写入新加的bb.doc文件
zos.putNextEntry(new ZipEntry("ccc/"));//建立ccc文件夹,此文件夹为空
zos.closeEntry(); //关闭
zos.close(); //关闭压缩流
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", "attachment; filename=" + zipName);//zipName为下载的文件名
outp = response.getOutputStream(); //输出流用于下载
outp.flush();