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<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实现批量下载选中文件功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Java下载文件时文件名乱码问题解决办法

    复制代码 代码如下: public static String toUtf8String(String s) { StringBuffer sb = new StringBuffer();              for (int i = 0; i < s.length(); i++) {                  char c = s.charAt(i);                  if (c >= 0 && c <= 255) {          

  • JAVA技术实现上传下载文件到FTP服务器(完整)

    具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作. 关于FileZilla Server服务器的详细搭建配置过程,详情请见 FileZilla Server安装配置教程 .之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲

  • Java通过FTP服务器上传下载文件的方法

    对于使用文件进行交换数据的应用来说,使用FTP 服务器是一个很不错的解决方案. 关于FileZilla Server服务器的详细搭建配置过程,详情请见FileZilla Server安装配置教程.之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到FileZilla Server都没有该问题,朋友们可以放心使用该代码. FavFTPUtil.Java package com.favccxx.favsoft.util; import jav

  • Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!--配置下载返回类型--> <bean class="or

  • 使用java实现http多线程断点下载文件(二)

    下载工具我想没有几个人不会用的吧,前段时间比较无聊,花了点时间用java写了个简单的http多线程下载程序,纯粹是无聊才写的,只实现了几个简单的功能,而且也没写界面,今天正好也是一个无聊日,就拿来写篇文章,班门弄斧一下,觉得好给个掌声,不好也不要喷,谢谢! 我实现的这个http下载工具功能很简单,就是一个多线程以及一个断点恢复,当然下载是必不可少的.那么大概先整理一下要做的事情: 1.连接资源服务器,获取资源信息,创建文件 2.切分资源,多线程下载 3.断点恢复功能 4.下载速率统计 大概就这几

  • 使用java实现http多线程断点下载文件(一)

    基本原理:利用URLConnection获取要下载文件的长度.头部等相关信息,并设置响应的头部信息.并且通过URLConnection获取输入流,将文件分成指定的块,每一块单独开辟一个线程完成数据的读取.写入.通过输入流读取下载文件的信息,然后将读取的信息用RandomAccessFile随机写入到本地文件中.同时,每个线程写入的数据都文件指针也就是写入数据的长度,需要保存在一个临时文件中.这样当本次下载没有完成的时候,下次下载的时候就从这个文件中读取上一次下载的文件长度,然后继续接着上一次的位

  • java webservice上传下载文件代码分享

    本文实例为大家分享了java webservice上传下载文件代码,供大家参考,具体内容如下 1.新建动态web工程youmeFileServer,新建包com,里面新建类FileProgress package com; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.sql.Date; import java.text.Simple

  • java操作ftp下载文件示例

    复制代码 代码如下: /**     *      * JAVA操作 FTP 下载     * 文件下载.     *     */    private void ftpDownload()    {        FTPClient ftpClient = null;        InputStream input = null;        boolean loginFlag = false;        List<String> list = new ArrayList<S

  • 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; //浏览器

  • java实现批量下载 多文件打包成zip格式下载

    本文实例为大家分享了java实现批量下载的具体代码,供大家参考,具体内容如下 现在的需求的: 根据产品族.产品类型,下载该产品族.产品类型下面的pic包: pic包是zip压缩文件: t_product表: 这些包以blob形式存在另一张表中: t_imagefile表: 现在要做的是:将接入网.OLT下面的两个包downloadPIC:MA5800系列-pic.zip 和 MA5900-pic.rar一起打包成zip压缩文件下载下来: 代码: ProductController.java: /

  • java后台批量下载文件并压缩成zip下载的方法

    本文实例为大家分享了java后台批量下载文件并压缩成zip下载的具体代码,供大家参考,具体内容如下 因项目需要,将服务器上的图片文件压缩打包zip,下载到本地桌面. 首先,前端js: function doQueryPic() { var picsDate = $("#picsDate").val(); var piceDate = $("#piceDate").val(); var picInst = $("#pic_inst").combot

  • Java实现批量下载(打包成zip)的实现

    引言 批量下载思路,首先前端发送下载请求,携带必要参数,也可无参默认批量下载页面全部数据:后台接收后进行数据处理拿到要下载文件的下载地址,循环下载地址,用压缩流,将文件直接写入压缩包,最后利用文件下载将压缩包输出给前端. 一.前端JS发送下载请求 1.ajax无法发送下载请求 关于下载的常见需求无非就是点击按钮下载或者选中点击批量下载,点击下载或批量下载后,携带参数向后台发送下载请求,但是JS中的ajax无法触发浏览器的下载机制,这也是处于安全考虑,所以下载请求不可以通过发送ajax请求实现.

  • Java OSS批量下载并压缩为ZIP代码实例

    这篇文章主要介绍了Java OSS批量下载并压缩为ZIP代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 /** * 批量下载为zip * @param req * @param response * @param keyList oss文件路径集合 * @param fileName 下载出来的zip文件名(一般以合同名命名) 如:测试合同,zip */ public static void downForZip(HttpServlet

  • java实现简单解析XML文件功能示例

    本文实例讲述了java实现简单解析XML文件功能.分享给大家供大家参考,具体如下: package demo; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException;

  • 使用Linux shell脚本实现FTP定时执行批量下载指定文件

    使用FTP定时批量下载指定文件的shell脚本,具体实例介绍如下所示: 1.目标FTP服务器地址 #FTP服务器地址 ip=10.19.15.23 2.FTP账号和密码 u=账号 p=密码 3.使用mget结合正则表达式下载文件 #获取昨天日期,为后面下载使用 T=`date -d yesterday +%Y%m%d` 4.连接FTP服务器,到指定路径下下载文件 ftp -n <<EOF open $ip user $u $p binary cd /hour #远程服务器文件目录 lcd /h

  • Java读取并下载网络文件的方法

    本文实例为大家分享了Java读取并下载网络文件的具体代码,供大家参考,具体内容如下 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; /**

  • Python使用wget实现下载网络文件功能示例

    本文实例讲述了Python使用wget实现下载网络文件功能.分享给大家供大家参考,具体如下: wget是一个从网络上自动下载文件的自由工具.它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理. ubuntu 安装wget pip install wget 从网络或本地硬盘下载文件(并解压) # -*- coding: utf-8 -*- import wget, tarfile import os # 网络地址 DATA_URL = 'http://www.robots.ox.ac.u

  • Java实现批量修改txt文件名称的方法示例

    本文实例讲述了Java实现批量修改txt文件名称的方法.分享给大家供大家参考,具体如下: 最近在做特征选择的实验时,需要批量修改一下文件名称,在这里做一下记录. package com.cqu.experiment; import java.io.File; /** * @author 作者: E-mail:@126.com * @version 创建时间:2016年12月26日 下午3:02:01 类说明 */ public class RenameTxt { public static vo

随机推荐