欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java实现批量下载选中文件功能

程序员文章站 2024-04-01 19:26:28
1.在action中定义变量 private list downloadpaths = new arraylist

1.在action中定义变量

 private list<string> downloadpaths = new arraylist<string>();//存储选中文件的下载地址 
 private outputstream res; 
 private zipoutputstream zos; 
 private string outpath; 
 private string lessionidstr;// 选中文件id拼接的字符串 
 private string filename; //浏览器下载弹出框中显示的文件名 

  分别给出get和set方法

2.  主方法 

/** 
   * 下载多个文件:压缩成zip 
   * 
   * @return 
   * @throws exception 
   */ 
  public string downloadlessionszip() { 
    downloadpaths.clear(); 
    string firstfilename = "";// 第一个文件的文件名 
    list<downloadfilevo> filevos = new linkedlist<downloadfilevo>(); 
    if (stringutils.isnotempty(lessionidstr)) { 
      int end = lessionidstr.lastindexof(","); 
      if (end > 0) { 
        if (end == lessionidstr.length() - 1) { 
          lessionidstr = lessionidstr.substring(0, end); 
        } 
        string[] ids = lessionidstr.split(","); 
        for (int i = 0; i < ids.length; i++) { 
          if (stringutils.isnumeric(ids[i])) { 
            bkpersonlession lession = bkpersonlessionservice.downloadlession(integer.parseint(ids[i])); 
            if (lession != null) { 
              filevos.add(new downloadfilevo(lession 
                  .getlessionname(), getcontextrealpath() 
                  + lession.getlessionsavepath())); 
              downloadpaths.add(getcontextrealpath() 
                  + lession.getlessionsavepath()); 
            } 
            if (i == 0) {               
                       firstfilename = lession.getlessionname(); 
            } 
          } 
        } 
      } 
    } 
    // 有数据可以下载 
    if (downloadpaths.size() != 0) { 
      // 进行预处理 
      preprocess(firstfilename); 
    } else { 
      // 没有文件可以下载,返回nodata 
      return "nodata"; 
    } 
    // 处理 
    writezip(filevos); 
    // 后处理关闭流 
    afterprocess(); 
    return null; 
  } 
  // 压缩处理 
  public void writezip(list<downloadfilevo> filevos) { 
    byte[] buf = new byte[8192]; 
    int len; 
    for (downloadfilevo filevo : filevos) { 
      file file = new file(filevo.getfilesavepath()); 
      if (!file.isfile()) 
        continue; 
      zipentry ze = new zipentry(filevo.getfilename() 
          + filevo.getfilesavepath().substring( 
              filevo.getfilesavepath().lastindexof(".")));                           
      try { 
        zos.putnextentry(ze); 
        bufferedinputstream bis = new bufferedinputstream( 
            new fileinputstream(file)); 
        while ((len = bis.read(buf)) > 0) { 
          zos.write(buf, 0, len); 
        } 
        bis.close(); 
        zos.closeentry(); 
      } catch (ioexception e) { 
        e.printstacktrace(); 
      } 
    } 
  } 
  // 预处理 
  public void preprocess(string firsefilename) { 
    string zipname = "【批量下载】" + firsefilename + "等.zip"; 
    string filename = ""; 
    try { 
      filename = new string(zipname.getbytes("gbk"), "8859_1"); 
    } catch (unsupportedencodingexception e1) { 
      e1.printstacktrace(); 
    } 
    this.filename = filename; 
    httpservletresponse response = servletactioncontext.getresponse(); 
    try { 
      res = response.getoutputstream(); 
      // 清空输出流(在迅雷下载不会出现一长窜) 
      response.reset(); 
      // 设定输出文件头 
      response.setheader("content-disposition", "attachment;filename=" 
          + filename); 
      response.setcontenttype("application/zip"); 
      zos = new zipoutputstream(res); 
    } catch (ioexception e) { 
      e.printstacktrace(); 
    } 
  } 
  // 后处理 
  public void afterprocess() { 
    try { 
      if (zos != null) { 
        zos.close(); 
      } 
      if (res != null) { 
        res.close(); 
      } 
    } catch (ioexception e) { 
      e.printstacktrace(); 
    } 
  } 

3. 在struts.xml中配置

<action name="downloadbkpersonlessionszip" class="bkpersonlessionaction"  
      method="downloadlessionszip">//class值为bean.xml中配置的bean 
  <result name="nodata" type="httpheader"> 
    <param name="status">204</param>//表示响应执行成功,但没有数据返回,浏览器不用刷新,不用导向新页面 
  </result> 
</action> 

总结

以上所述是小编给大家介绍的java实现批量下载选中文件功能,希望对大家有所帮助