中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中瀏覽器文件打包下載的示例分析

發布時間:2021-07-20 13:45:52 來源:億速云 閱讀:159 作者:小新 欄目:編程語言

這篇文章主要介紹java中瀏覽器文件打包下載的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1.controller層代碼:

/**
   * 圖片壓縮打包
   */
  @RequestMapping(value = "/zipFile")
  public void compressionFile(HttpServletRequest request, HttpServletResponse response,String busiId) throws Exception{
    //業務代碼,根據前臺傳來的ID查詢到資源表的圖片list
    SubMetaData subMetaData = subMetaDataService.findByBusiId(busiId);
    if (subMetaData != null) {
      List<SubMetaDataAtt> list = subMetaDataAttService.findByDataId(subMetaData.getDataId());
      if (list.size() > 0){
        subMetaDataAttService.downloadAllFile(request,response,list);
      }
    }
  }

2.service層通用的文件打包下載

/**
   * 將多個文件進行壓縮打包,解決文件名下載后的亂碼問題
   *
   */
  public void downloadAllFile(HttpServletRequest request, HttpServletResponse response, List<SubMetaDataAtt> list) throws UnsupportedEncodingException{
    String downloadName = "附件圖片.zip";
    String userAgent = request.getHeader("User-Agent");
    // 針對IE或者以IE為內核的瀏覽器:
    if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
      downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");
    } else {
      // 非IE瀏覽器的處理:
      downloadName = new String(downloadName.getBytes("UTF-8"), "ISO-8859-1");
    }
//經過上面的名稱處理即可解決文件名下載后亂碼的問題
    response.setContentType("multipart/form-data");
    response.setCharacterEncoding("UTF-8");
    response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", downloadName));
    //response.setHeader("Content-Disposition", "attachment;fileName=" + downloadName);
    OutputStream outputStream = null;
    ZipOutputStream zos = null;
    try {
      outputStream = response.getOutputStream();
      zos = new ZipOutputStream(outputStream);
      // 將文件流寫入zip中,此方法在下面貼出
      downloadTolocal(zos,list);
    } catch (IOException e) {
      logger.error("downloadAllFile-下載全部附件失敗",e);
    }finally {
      if(zos != null) {
        try {
          zos.close();
        } catch (Exception e2) {
          logger.info("關閉輸入流時出現錯誤",e2);
        }
      }
      if(outputStream != null) {
        try {
          outputStream.close();
        } catch (Exception e2) {
          logger.info("關閉輸入流時出現錯誤",e2);
        }
      }

    }

  }

將文件寫入zip中的方法:

private void downloadTolocal(ZipOutputStream zos, List<SubMetaDataAtt> list) throws IOException {
    //獲取文件信息//此處為業務代碼,可根據自己的需要替換,我在這里是將資源表list循環出取得路徑以及文件名,然后放進ZipEntry中再執行下載。
    for (SubMetaDataAtt subMetaDataAtt : list) {
      String fileId = subMetaDataAtt.getAttId();
      String fileName = subMetaDataAtt.getFileAlias()+subMetaDataAtt.getFileSuffixName();
      String path = subMetaDataAtt.getFileAbsolutePath();
      InputStream is = null;
      BufferedInputStream in = null;
      byte[] buffer = new byte[1024];
      int len;
      //創建zip實體(一個文件對應一個ZipEntry)
      ZipEntry entry = new ZipEntry(fileName);
      try {
        //獲取需要下載的文件流
        File file= new File(path);
        if(file.exists()){
          is = new FileInputStream(file);
        }
        in = new BufferedInputStream(is);
        zos.putNextEntry(entry);
        //文件流循環寫入ZipOutputStream
        while ((len = in.read(buffer)) != -1 ) {
          zos.write(buffer, 0, len);
        }
      } catch (Exception e) {
        logger.info("下載全部附件--壓縮文件出錯",e);
      }finally {
        if(entry != null) {
          try {
            zos.closeEntry();
          } catch (Exception e2) {
            logger.info("下載全部附件--zip實體關閉失敗",e2);
          }
        }
        if(in != null) {
          try {
            in.close();
          } catch (Exception e2) {
            logger.info("下載全部附件--文件輸入流關閉失敗",e2);
          }
        }
        if(is != null) {
          try {
            is.close();
          }catch (Exception e) {
            logger.info("下載全部附件--輸入緩沖流關閉失敗",e);
          }
        }


      }

    }

3.前臺js的請求方法:

注:文件的下載不要使用AJAX請求的方法,這樣是無法響應請求的,一般會采用Window.open的方法。

window.open(context+"/sub/submetadataatt/zipFile?busiId="+downloadId);//這里的downloadId是我需要傳到后臺的變量。

以上是“java中瀏覽器文件打包下載的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

奉节县| 南平市| 喜德县| 南投市| 曲沃县| 石家庄市| 正蓝旗| 呼图壁县| 鹤壁市| 吉林市| 开阳县| 洪洞县| 集安市| 信宜市| 丰顺县| 佛冈县| 杭锦旗| 海宁市| 涡阳县| 临猗县| 泊头市| 德州市| 邹平县| 台湾省| 长春市| 科技| 宁陕县| 贡觉县| 辰溪县| 广昌县| 太谷县| 临潭县| 钟祥市| 大埔区| 宣恩县| 甘孜| 英德市| 军事| 宝丰县| 同仁县| 黄骅市|