Spring Boot打包文件进行zip下载

964 阅读1分钟
import java.io.*;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
 * 打包文件进行zip下载
 * @param files:文件路径,本地路径(服务器上则在临时文件夹生成)
 * @param response
 */
private void writeZip(List<String> files,HttpServletResponse response){
    response.setContentType("application/zip");
    response.setHeader("content-disposition", "attachment;filename=" + UUID.randomUUID()+".zip");
    ZipOutputStream zos = null;
    BufferedInputStream bis = null;
    try{
        zos = new ZipOutputStream(response.getOutputStream());
        byte[] buf = new byte[8192];
        int len;
        for (int i = 0; i < files.size(); i++) {
            File file = new File(files.get(i));
            if (!file.isFile()) continue;
            ZipEntry ze = new ZipEntry(file.getName());
            zos.putNextEntry(ze);
            bis = new BufferedInputStream(new FileInputStream(file));
            while ((len = bis.read(buf)) > 0) {
                zos.write(buf, 0, len);
            }
            zos.closeEntry();
        }
        zos.closeEntry();

    }catch(Exception ex){
        log.error(ex.getMessage());
    }finally {
        if(bis != null){
            try{
                bis.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        if(zos != null){
            try{
                zos.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }

}