这篇文章主要介绍了Java实现批量下载选中文件功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
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&lt;DownLoadFileVo&gt; fileVos = new LinkedList&lt;DownLoadFileVo&gt;(); 
    if (StringUtils.isNotEmpty(lessionIdStr)) { 
      int end = lessionIdStr.lastIndexOf(","); 
      if (end &gt; 0) { 
        if (end == lessionIdStr.length() - 1) { 
          lessionIdStr = lessionIdStr.substring(0, end); 
        } 
        String[] ids = lessionIdStr.split(","); 
        for (int i = 0; i &lt; 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&lt;DownLoadFileVo&gt; 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)) &gt; 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实现批量下载选中文件功能,希望对大家有所帮助,如果大家有任何疑问请给我留言

详细的代码及配置信息可以参考我写的这篇文章:

http://blog.ncmem.com/wordpress/2019/08/28/java%e6%89%b9%e9%87%8f%e4%b8%8b%e8%bd%bd/

java+文件批量下载的更多相关文章

  1. Jsp实现筛选并压缩文件批量下载

    Jsp实现筛选并压缩文件批量下载 首先明确一下需求,网页端点击一下button,传递特定的参数到download.jsp网页,筛选文件,对过滤得到的文件进行压缩,然后返回前端一个压缩包下载. 以下的代 ...

  2. C#子线程中更新ui-----c# 多线程多文件批量下载

    c# 多线程多文件批量下载   废话少说,先演示一张效果图 简单说下过程喽 开发过程中其实总是会碰到项目想应用下载文件~ 看其他语言有很多封装好的类库可以使用~~ 作为小白的我并没有找到很多c#的案例 ...

  3. SQL 横转竖 、竖专横 (转载) 使用Dapper.Contrib 开发.net core程序,兼容多种数据库 C# 读取PDF多级书签 Json.net日期格式化设置 ASPNET 下载共享文件 ASPNET 文件批量下载 递归,循环,尾递归 利用IDisposable接口构建包含非托管资源对象 《.NET 进阶指南》读书笔记2------定义不可改变类型

    SQL 横转竖 .竖专横 (转载)   普通行列转换 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 ...

  4. js 实现多文件批量下载

    关于兼容性问题: <a href="xxx.docx" target='_blank'></a> 下载文件时,这种写法是没有兼容性问题:但是下载图片时,IE ...

  5. java/resteasy批量下载存储在阿里云OSS上的文件,并打包压缩

    现在需要从oss上面批量下载文件并压缩打包,搜了很多相关博客,均是缺胳膊少腿,要么是和官网说法不一,要么就压缩包工具类不给出 官方API https://help.aliyun.com/documen ...

  6. java多线程批量下载文件

    多线程下载文件 平时开发中有时会用到文件下载,为了提高文件的下载速率,采用多线程下载能够达到事半功倍的效果: package test; /** * 文件下载类 * @author luweichen ...

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

    1.在action中定义变量 ? 1 2 3 4 5 6 private List<String> downLoadPaths = new ArrayList<String>( ...

  8. R语言之RCurl实现文件批量下载

    前言: RCurl工具包的作者是由Duncan Temple Lang现任加州大学 U.C. Davis分校副教授.他曾致力于借助统计整合进行信息技术的探索.使用者通过RCurl可以轻易访问网页,进行 ...

  9. Java实现批量下载《神秘的程序员》漫画

    上周看了西乔的博客“西乔的九卦”.<神秘的程序员们>系列漫画感觉很喜欢,很搞笑.这些漫画经常出现在CSDN“程序员”杂志末页的,以前也看过一些. 后来就想下载下来,但是一张一张的点击右键“ ...

随机推荐

  1. windows环境下使用C++&Socket实现文件传输

    server #include <stdio.h> #include <iostream> #include <cstring> #include <fstr ...

  2. tp5支付宝和微信支付

    一.生成二维码给用户进行扫码支付 1.先在vendor目录下加入支付宝和微信支付的引用 2.付款处调用 /** * 订单支付接口 * * @api {post} {:url('order/pay')} ...

  3. python 安装PostgreSQL 模块:psycopg2

    官方资料:http://www.psycopg.org/psycopg/docs/ 安装: yum -y install python-psycopg2 (安装的版本可能是2.0) pip insta ...

  4. vue.js中,如何把text按html格式化显示

    先说方法:v-html = "你的字符串" <el-table-column type="expand" label="详情" hea ...

  5. Java Web Tomcat服务器

    一.Tomcat目录结构 1.bin:存放脚本文件.其中有个档是catalina.bat,打开这个配置文件,在非注释行加入JDK路径(SET JAVA_HOME=C:\j2sdk1.4.2_06)保存 ...

  6. JS 正则验证字符串中是否含有数字

    var test_text="abc123";//2. if (new RegExp("[0-9]").test(test_text)) { return fa ...

  7. MVC进阶讲解+小技巧-乱七八糟

    开发步骤 1.建立项目 2.建立文件夹 3.建立Controllers 4.生成页面 5.编写Html+Js 6.编写异步请求的Action的方法,返回部分页(用于分页) 7.Js中显示部分页 8.增 ...

  8. 【原创】大叔经验分享(74)nginx对静态文件加速

    通过location配置 location ~ \.html$ { add_header 'Cache-Control' 'no-cache'; } location ~ \.(js|css|gif| ...

  9. O048、掌握 cinder-scheduler 调度逻辑

    参考https://www.cnblogs.com/CloudMan6/p/5589707.html   上一节我们详细讨论了cinder-api 和 cinder-volume ,今天讨论另一个重要 ...

  10. 微信小程序子传父

    子组件 父组件