JavaWeb 实现多个文件压缩下载功能

文件下载时,我们可能需要一次下载多个文件。批量下载文件时,需要将多个文件打包为zip,然后再下载。

实现思路有两种:

一是将所有文件先打包压缩为一个文件,然后下载这个压缩包,

二是一边压缩一边下载,将多个文件逐一写入到压缩文件中。我这里实现了边压缩边下载。

下载样式:

点击下载按钮,会弹出下载框:

下载后就有一个包含刚刚选中的两个文件:

代码实现:

FileBean

public class FileBean implements Serializable {
  private Integer fileId;// 主键
  private String filePath;// 文件保存路径
  private String fileName;// 文件保存名称
  public FileBean() {
  }
  public Integer getFileId() {
    return fileId;
  }
  public void setFileId(Integer fileId) {
    this.fileId = fileId;
  }
  public String getFilePath() {
    return filePath;
  }
  public void setFilePath(String filePath) {
    this.filePath = filePath;
  }
  public String getFileName() {
    return fileName;
  }
  public void setFileName(String fileName) {
    this.fileName = fileName;
  }
} 

控制层:

@RequestMapping(value = "/download", method = RequestMethod.GET)
  public String download(String id, HttpServletRequest request,
      HttpServletResponse response) throws IOException {
    String str = "";
    if (id != null && id.length() != 0) {
      int index = id.indexOf("=");
      str = id.substring(index + 1);
      String[] ids = str.split(",");
      ArrayList<FileBean> fileList = new ArrayList<FileBean>();
      for (int i = 0; i < ids.length; i++) {// 根据id查找genericFileUpload,得到文件路径以及文件名
        GenericFileUpload genericFileUpload = new GenericFileUpload();
        genericFileUpload = genericFileUploadService.find(Long.parseLong(ids[i]));
        FileBean file = new FileBean();
        file.setFileName(genericFileUpload.getFileName());
        file.setFilePath(genericFileUpload.getFilePath());
        fileList.add(file);
      }
      //设置压缩包的名字
      //解决不同浏览器压缩包名字含有中文时乱码的问题
      String zipName = "download.zip";
      response.setContentType("APPLICATION/OCTET-STREAM");
      response.setHeader("Content-Disposition", "attachment; filename="+ zipName);
      //设置压缩流:直接写入response,实现边压缩边下载
      ZipOutputStream zipos =null;
      try{
        zipos=new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
        zipos.setMethod(ZipOutputStream.DEFLATED);//设置压缩方法
      }catch(Exception e){
        e.printStackTrace();
      }
      DataOutputStream os=null;
      //循环将文件写入压缩流
      for(int i=0;i<fileList.size();i++){
        String filePath=fileList.get(i).getFilePath();
        String fileName=fileList.get(i).getFileName();
        File file=new File(filePath+"/"+fileName);//要下载文件的路径
        try{
          //添加ZipEntry,并ZipEntry中写入文件流
          //这里,加上i是防止要下载的文件有重名的导致下载失败
          zipos.putNextEntry(new ZipEntry(i+fileName));
          os=new DataOutputStream(zipos);
          InputStream is=new FileInputStream(file);
          byte[] b = new byte[100];
          int length = 0;
          while((length = is.read(b))!= -1){
            os.write(b, 0, length);
          }
          is.close();
          zipos.closeEntry();
        }catch(Exception e){
          e.printStackTrace();
        }
      }
       //关闭流
      try {
        os.flush();
        os.close();
        zipos.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return "redirect:list.jhtml";
  } 

总结

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

(0)

相关推荐

  • JavaWeb实现文件上传与下载的方法

    文件上传概述 实现web开发中的文件上传功能,需完成如下二步操作: 在web页面中添加上传输入项 在servlet中读取上传文件的数据,并保存到本地硬盘中. 如何在web页面中添加上传输入项? <input type="file">标签用于在web页面中添加文件上传输入项,设置文件上传输入项时须注意: 1.必须要设置input输入项的name属性,否则浏览器将不会发送上传文件的数据. 2.必须把form的enctype属值设为multipart/form-data.设置该值

  • javaweb文件打包批量下载代码

    本文实例为大家分享了javaweb文件打包批量下载,供大家参考,具体内容如下 // 批量下载未批改作业 @RequestMapping(value = "/downloadAllHomework", method = RequestMethod.GET) public void downloadAllHomework(HttpSession httpSession, HttpServletRequest request, HttpServletResponse response, St

  • JavaWeb文件下载功能实例代码

    在工作中遇到的一个下载文件的功能,自己将其抽取出来,代码简单,希望能帮到大家,好了,话不多说,上代码! public void downloadFile(File file, String downName, HttpServletRequest request, HttpServletResponse response) { OutputStream out = null; FileInputStream fin = null; BufferedInputStream bin = null;

  • JavaWeb实现文件上传下载功能实例详解

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 文件上传概述 1.文件上传的作用 例如网络硬盘!就是用来上传下载文件的. 在智联招聘上填写一个完整的简历还需要上传照片呢. 2.文件上传对页面的要求 上传文件的要求比较多,需要记一下: 必须使用表单,而不能是超链接 表单的method必须是POST,而不能是GET 表单的enctype必须是multipart/form-data 在表单中添加file表单字段,即<input ty

  • JavaWeb中struts2实现文件上传下载功能实例解析

    在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就单文件上传和多文件上传的源代码进行一下讲解,这里需要导入文件下载上传的两个jar文件,一个是commons-fileupload-1.2.2.jar,另一个是commons-io-2.0.

  • JavaWeb实现文件上传与下载实例详解

    在Web应用程序开发中,文件上传与下载功能是非常常用的功能,下面通过本文给大家介绍JavaWeb实现文件上传与下载实例详解. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,common-fileupload是依赖于c

  • JavaWeb实现文件上传下载功能实例解析

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

  • JavaWeb导出Excel文件并弹出下载框

    一.引言 在Java Web开发中经常涉及到报表,最近做的项目中需要实现将数据库中的数据显示为表格,并且实现导出为Excel文件的功能. 二.相关jar包 使用POI可以很好的解决Excel的导入和导出的问题,POI下载地址: poi-3.6-20091214.jar 三.关键代码 首先导入上述jar包. 在生成excel时一般数据源形式为一个List,下面把生成Excel格式的代码贴出来: /** * 以下为生成Excel操作 */ // 1.创建一个workbook,对应一个Excel文件

  • JavaWeb 实现多个文件压缩下载功能

    文件下载时,我们可能需要一次下载多个文件.批量下载文件时,需要将多个文件打包为zip,然后再下载. 实现思路有两种: 一是将所有文件先打包压缩为一个文件,然后下载这个压缩包, 二是一边压缩一边下载,将多个文件逐一写入到压缩文件中.我这里实现了边压缩边下载. 下载样式: 点击下载按钮,会弹出下载框: 下载后就有一个包含刚刚选中的两个文件: 代码实现: FileBean public class FileBean implements Serializable { private Integer f

  • Java多文件生成并压缩下载功能(思路详解)

    年前一直忙着项目现场实施,没时间整理,今天终于得空开始整理. 做WMS系统经常会遇到导出各种类型的库存单,此时就可以在后台将这些整合压缩到一个压缩包内然后再下载压缩包,一个接口就可以完成的事. 有两个思路: 思路一:将生成的多个文件先逐个存到本地一个临时的文件夹内并压缩,获取压缩文件下载,下载完以后删除该临时文件夹和内部文件 思路二:所有都在内存中实现,将生成的多个文件的输出流转换成为byte数组塞入压缩包的输出流中,最后下载该压缩包 第一个思路虽然操作复杂,但是却很容易想到的. 第二个思路,所

  • java多文件压缩下载的解决方法

    Java多文件压缩下载解决方案,供大家参考,具体内容如下 需求: 会员运营平台经过改版后页面增加了许多全部下载链接,上周上线比较仓促,全部下载是一个直接下载ZIP压缩文件的链接,每个ZIP压缩文件都是由公司运营人员将页面需要下载的文件全部压缩成一个ZIP压缩文件,然后通过公司的交易运营平台上传至文件资料系统,会员运营平台则可以直接获取ZIP压缩文件地址进行下载 下面是一个页面示例: 需求分析: 通过上面需求和页面可以分析出,公司运营人员将页面全部需要下载的文件进行ZIP压缩后上传文件资料系统确实

  • JavaWeb如何实现本地文件上传功能

    这篇文章主要介绍了JavaWeb如何实现本地文件上传功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Web中的文件上传主要是分为两步 在Web页面中设置一个上传文件的选项,一般是通过<form><input>两个标签实现 在Servlet类中读取到上传的文件,并保存到服务器中 记录实现步骤前先撸一遍需要注意的几个地方,以及两个jar包和类的介绍 需要注意的地方 <input>输入项的type属性设置为'file',

  • php实现网站文件批量压缩下载功能

    利用php实现将文件批量压缩打包下载,这个过程中将使用到 ZipArchive 这个类,注意使用该类之前,linux需开启zlib,windows需取消php_zip.dll前的注释.下面直接给出一个简单的将文件压缩为 zip 格式的示例.具体用法请查询php相关文档. <?php $filename='test.zip'; //最终生成的文件名(含路径) if(file_exists($filename)){ unlink($filename); } //重新生成文件 $zip=new Zip

  • asp.net实现多个文件同时下载功能

    本文实例为大家分享了asp.net多个文件同时下载的具体代码,供大家参考,具体内容如下 1.首先读取文件夹下的文件,可能同时存在多个文件 2.选中文件,然后点击下载,同时可以选择多个文件. 思路:通过生产压缩包的形式进行下载,然后再清楚压缩包,这样用户可以一次性全部下载下来. 一.获取目录下的所有文件,然后绑定到checkboxlist中 ,代码如下: ckl_ck.Items.Clear(); DirectoryInfo TheFolder = new DirectoryInfo(Server

  • ztree+ajax实现文件树下载功能

    基于java实现文件树下载,供大家参考,具体内容如下 0.项目准备工作 1.前端用到的插件库: ztree官网 2.后端maven依赖: <dependencies> <!-- servlet依赖 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0&

  • ASP隐藏真实文件的下载功能实现代码

    格式:Download.asp?FileName=要下载的文件名 复制代码 代码如下: Dim Stream Dim Contents Dim FileName Dim FileExt Const adTypeBinary = 1 FileName = Request.QueryString("FileName") if FileName = "" Then Response.Write "无效文件名." Response.End End if

  • JS实现百度网盘任意文件强制下载功能

    代码: //get file list data var data=require("system-core:context/context.js").instanceForSystem.getList().listView.listsData; //calculate sign function base64Encode(r){var t,e,a,c,n,o,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012

  • java实现文件断点续传下载功能

    本文实例为大家分享了java断点续传下载的代码,供大家参考,具体内容如下 1. Java代码     //实现文件下载功能 public String downloadFile(){ File dir = new File(filepath);//获取文件路劲 if(!dir.exists()) { System.out.println("文件路径错误"); log.debug("文件路径错误"); return "failed";// 判断文件

随机推荐