欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaWeb 實現多個文件壓縮下載功能

 更新時間:2017年07月31日 14:21:26   作者:愛計算機的彭濤  
文件下載時,我們可能需要一次下載多個文件,批量下載文件時,需要將多個文件打包為zip,然后再下載。本文給大家分享實現思路及具體實現代碼,對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; 
      //循環(huán)將文件寫入壓縮流 
      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 實現多個文件壓縮下載功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • Java編程之雙重循環(huán)打印圖形

    Java編程之雙重循環(huán)打印圖形

    這篇文章主要介紹了Java編程之雙重循環(huán)打印圖形,屬于Java編程基礎練習部分,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Drools Fusion(CEP)定義及使用方法講解

    Drools Fusion(CEP)定義及使用方法講解

    今天小編就為大家分享一篇關于Drools Fusion(CEP)定義及使用方法講解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 關于各種排列組合java算法實現方法

    關于各種排列組合java算法實現方法

    這篇文章介紹了幾種用JAVA實現的排列組合算法,有需要的朋友可以參考一下
    2013-06-06
  • spring cloud zuul 與 sentinel的結合使用操作

    spring cloud zuul 與 sentinel的結合使用操作

    這篇文章主要介紹了spring cloud zuul 與 sentinel 的結合使用操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring Cloud項目前后端分離跨域的操作

    Spring Cloud項目前后端分離跨域的操作

    這篇文章主要介紹了Spring Cloud項目前后端分離跨域的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringCloud Zuul的使用簡介

    SpringCloud Zuul的使用簡介

    這篇文章主要介紹了SpringCloud Zuul的使用簡介,幫助大家更好的理解和學習使用Spring Cloud,感興趣的朋友可以了解下
    2021-04-04
  • Spring Cloud Alibaba和Dubbo融合實現

    Spring Cloud Alibaba和Dubbo融合實現

    這篇文章主要介紹了Spring Cloud Alibaba和Dubbo融合實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Spring BeanPostProcessor源碼示例解析

    Spring BeanPostProcessor源碼示例解析

    這篇文章主要為大家介紹了Spring BeanPostProcessor源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • SpringMVC中@RequestMapping注解用法實例

    SpringMVC中@RequestMapping注解用法實例

    通過@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關于SpringMVC中@RequestMapping注解用法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Spring Boot兩種全局配置和兩種注解的操作方法

    Spring Boot兩種全局配置和兩種注解的操作方法

    Spring Boot使用一個application.properties或者application.yaml的文件作為全局配置文件,本文重點給大家介紹Spring Boot兩種全局配置和兩種注解的配置方法,感興趣的朋友一起看看吧
    2021-06-06

最新評論