栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

1.在action中定义变量

 private List downLoadPaths = new ArrayList();//存储选中文件的下载地址 
 private OutputStream res; 
 private ZipOutputStream zos; 
 private String outPath; 
 private String lessionIdStr;// 选中文件ID拼接的字符串 
 private String fileName; //浏览器下载弹出框中显示的文件名 

  分别给出get和set方法

2.  主方法 

 
  public String downLoadLessionsZip() { 
    downLoadPaths.clear(); 
    String firstFileName = "";// 第一个文件的文件名 
    List fileVos = new linkedList(); 
    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 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中配置

//class值为bean.xml中配置的bean 
   
    204//表示响应执行成功,但没有数据返回,浏览器不用刷新,不用导向新页面 
   
 

  用到的jar包

总结

以上所述是小编给大家介绍的Java实现批量下载选中文件功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对考高分网网站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/143119.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号