废话不多,直接来代码
@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(); } }