java实现批量下载

来源:互联网 发布:举重知乎 编辑:程序博客网 时间:2024/06/02 16:46
/**
  * 批量下载
  * @param response
  * @param request
  * @param filename 自定义的文件名
  * @param url 文件路径
  */
 public static int down(HttpServletResponse response,HttpServletRequest request,String filename,String[] url){
  
  /**创建一个临时压缩文件,这里的文件你可以自定义是.rar还是.zip*/
  String fileName=encodingFileName(filename);
  File file = new File(fileName);
         try {
            if(!file.exists()){ 
         file.createNewFile();
            }     
          /**要是弹出那个下载的框, 就必须有下边这两项的设置了 */
         response.reset();
            response.addHeader("Content-Disposition", "attachment; filename="+fileName);
      response.setContentType("application/octet-stream");
         /**创建文件输出流*/
         FileOutputStream fous = new FileOutputStream(file); 
         /**打包的方法我们会用到ZipOutputStream这样一个输出流,所以这里我们把输出流转换一下*/
         ZipOutputStream zipOut = new ZipOutputStream(fous);
         /**这个方法可以得到服务器的具体路径*/
         String path=request.getSession().getServletContext().getRealPath("/");
         /**这个方法接受的就是一个所要打包文件的集合或数组,还有一个ZipOutputStream*/
         String dir="upload/";
   for(int i=0;i<url.length;i++){
    /**dir服务器的upload文件夹 若有可以不写 */
    File files2 = new File(path+dir+url[i].replace("/", "\\"));
    File[] files1={files2};
    FileUtil.zipFile(files1, zipOut);
   }
   zipOut.close();
         fous.close();
         /**接下来的就是往客户端写数据了*/
         OutputStream out = response.getOutputStream();
         BufferedInputStream bin = new BufferedInputStream(new FileInputStream(file.getPath()));
         byte[] buf = new byte[8192];
         int len = 0;
         /**
          * IE: out.write(buf,0,len);下载超出一个文件会出现异常,但是可以正常下载
          * ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error
          * Firefox :可以正常运行, 目前还没有找到好的解决方法
          */
         while ((len = bin.read(buf, 0, 8192)) != -1) {
          out.write(buf, 0, len);
    }
       out.flush();
       out.close();
   } catch (IOException e) {
    /**屏蔽异常信息*/
    //e.printStackTrace();
  }
   return 1;
 }
原创粉丝点击