最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)批量下載選中文件功能

 更新時間:2017年11月21日 09:45:48   作者:秋分中的雨  
這篇文章主要介紹了Java實現(xiàn)批量下載選中文件功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

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(); 
            } 
          } 
        } 
      } 
    } 
    // 有數(shù)據(jù)可以下載 
    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(); 
      // 清空輸出流(在迅雷下載不會出現(xiàn)一長竄) 
      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>//表示響應執(zhí)行成功,但沒有數(shù)據(jù)返回,瀏覽器不用刷新,不用導向新頁面 
  </result> 
</action> 

  用到的jar包

總結

以上所述是小編給大家介紹的Java實現(xiàn)批量下載選中文件功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • Mybatis如何一次性插入多條數(shù)據(jù)

    Mybatis如何一次性插入多條數(shù)據(jù)

    這篇文章主要介紹了Mybatis如何一次性插入多條數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Spring Boot3.x自動配置不生效的排查與解決方法(IDEA 文件夾命名導致的問題)

    Spring Boot3.x自動配置不生效的排查與解決方法(IDEA 文件夾命名導致的問題)

    在SpringBoot多模塊項目中,自動配置類未生效的問題通常源于文件路徑錯誤,通過檢查和修正AutoConfiguration.imports文件的實際路徑,可以解決自動配置不生效的問題,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • SpringBoot詳細探究講解默認組件掃描

    SpringBoot詳細探究講解默認組件掃描

    在項目中我們創(chuàng)建了Controller,這個Controller是如何被spring自動加載的呢?為什么Controller必須放在啟動類的同級目錄下呢
    2022-06-06
  • 分析JVM的執(zhí)行子系統(tǒng)

    分析JVM的執(zhí)行子系統(tǒng)

    本文主要介紹了JVM執(zhí)行子系統(tǒng)。了解虛擬機是如何執(zhí)行程序的, 虛擬機怎樣運行一個Class文件的概念模型, 可以更好的理解怎樣寫出優(yōu)秀的代碼
    2021-06-06
  • Java并發(fā)編程中的ConcurrentLinkedQueue詳解

    Java并發(fā)編程中的ConcurrentLinkedQueue詳解

    這篇文章主要介紹了Java并發(fā)編程中的ConcurrentLinkedQueue詳解,GetThread線程不會因為ConcurrentLinkedQueue隊列為空而等待,而是直接返回null,所以當實現(xiàn)隊列不空時,等待時,則需要用戶自己實現(xiàn)等待邏輯,需要的朋友可以參考下
    2023-12-12
  • MyBatis自定義映射resultMap的實現(xiàn)

    MyBatis自定義映射resultMap的實現(xiàn)

    本文主要介紹了MyBatis自定義映射resultMap的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • 詳解基于MVC的數(shù)據(jù)查詢模塊進行模糊查詢

    詳解基于MVC的數(shù)據(jù)查詢模塊進行模糊查詢

    這篇文章主要介紹了Java基于MVC的數(shù)據(jù)查詢模塊進行模糊查詢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • 基于Java實現(xiàn)模板填充Word

    基于Java實現(xiàn)模板填充Word

    這篇文章主要為大家詳細介紹了如何用?Java?實現(xiàn)按產品經(jīng)理提供的?Word?模板填充數(shù)據(jù),并以?word?或?pdf?形式導出,有需要的小伙伴可以參考一下
    2025-01-01
  • springboot serverEndpoint導致@resource注解不生效

    springboot serverEndpoint導致@resource注解不生效

    在SpringBoot中,@Resource注解用于注入依賴,本文主要介紹了springboot serverEndpoint導致@resource注解不生效,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Java加載properties文件實現(xiàn)方式詳解

    Java加載properties文件實現(xiàn)方式詳解

    這篇文章主要介紹了Java加載properties文件實現(xiàn)方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07

最新評論

明光市| 天峻县| 横山县| 若尔盖县| 文安县| 和龙市| 南昌市| 周宁县| 庆云县| 石屏县| 清丰县| 通山县| 上高县| 灵寿县| 东兴市| 南岸区| 赤城县| 惠州市| 凤山县| 宜州市| 乌拉特前旗| 会东县| 赤峰市| 高唐县| 汕尾市| 镇康县| 平湖市| 中牟县| 西林县| 临桂县| 铁岭县| 商都县| 高碑店市| 闽清县| 会昌县| 眉山市| 祁连县| 伊宁县| 稻城县| 舞钢市| 太康县|