首页 > 开发 > Java > 正文

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

2024-07-13 10:13:52
字体:
来源:转载
供稿:网友

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> 

  用到的jar包

总结

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


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表