批量文件打包下载

废话不多,直接来代码

@Override
public void feedBackDirectMultiDownload(List<String> list,HttpServletRequest request, HttpServletResponse response) throws IOException{
    //压缩文件初始设置
    String path=snapFile;
    //临时文件名
  String  base_name = "temp";
    // 拼接zip文件
  String  fileZip = base_name + ".zip";
    //之后用来生成zip文件
  String  filePath = path+"\\" + fileZip;
    //文件数组
  File[]  files = new File[list.size()];
    for(int i=0;i<list.size();i++){
        //获得所有文件
        files[i]=new File(list.get(i));
    }

    // 创建临时压缩文件
    try {
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
        ZipOutputStream zos = new ZipOutputStream(bos);
        ZipEntry ze = null;
        //写入压缩文件
        for (int i = 0; i < files.length; i++) {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(files[i]));
            ze = new ZipEntry(files[i].getName());
            zos.putNextEntry(ze);
            int s = -1;
            while ((s = bis.read()) != -1) {
                zos.write(s);
            }
            bis.close();
        }
        zos.flush();
        zos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    //以上,临时压缩文件创建完成

    //进行浏览器下载
    //获得浏览器代理信息
    final String userAgent = request.getHeader("USER-AGENT");
    //判断浏览器代理并分别设置响应给浏览器的编码格式
    String finalFileName = null;
    if(StringUtils.contains(userAgent, "MSIE")||StringUtils.contains(userAgent,"Trident")){//IE浏览器
        finalFileName = URLEncoder.encode(fileZip,"UTF8");
        System.out.println("IE浏览器");
    }else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器
        finalFileName = new String(fileZip.getBytes(), "ISO8859-1");
    }else{
        finalFileName = URLEncoder.encode(fileZip,"UTF8");//其他浏览器
    }
    response.setContentType("application/x-download");//告知浏览器下载文件,而不是直接打开,浏览器默认为打开
    response.setHeader("Content-Disposition" ,"attachment;filename=\"" +finalFileName+ "\"");//下载文件的名称

    ServletOutputStream servletOutputStream=response.getOutputStream();
    DataOutputStream temps = new DataOutputStream(
            servletOutputStream);

    DataInputStream in = new DataInputStream(
            new FileInputStream(filePath));//浏览器下载文件的路径
    byte[] b = new byte[2048];
    File reportZip=new File(filePath);//之后用来删除临时压缩文件
    try {
        while ((in.read(b)) != -1) {
            temps.write(b);
        }
        temps.flush();
    } catch (Exception e) {
        e.printStackTrace();
    }finally{
        if(temps!=null) temps.close();
        if(in!=null) in.close();
        if(reportZip!=null) reportZip.delete();//删除服务器本地产生的临时压缩文件
        servletOutputStream.close();
    }
}

猜你喜欢

转载自blog.csdn.net/xm526489770/article/details/80696663