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

JavaWeb響應(yīng)下載功能實(shí)例代碼(包含工具類)

 更新時(shí)間:2017年07月11日 14:50:39   作者:ChoviWu  
今天通過本文給大家分享的是關(guān)于javaweb的響應(yīng)(response)下載功能,需要的朋友參考下吧

今天通過本文給大家分享是關(guān)于javaweb的響應(yīng)(response)下載

以下是我的Demo:

頁面我就粘主要部分的代碼

<a href = "${pageContext.request.contextPath }/user/courseTab">模板下載</a>

當(dāng)然,現(xiàn)在的項(xiàng)目大家都使用框架,這里我使用的是(SSM),好了,粘代碼

@Controller
@RequestMapping("/user")
public class UploadController {
@RequestMapping(value="/courseTab",method=RequestMethod.GET)
  public void courseTab(HttpServletResponse response,HttpServletRequest request) throws IOException{
    String path = request.getSession().getServletContext().getRealPath("/courseTab/課表上傳模板.xls");
    DownUtil.downMb(response, path, "課表模板"+DateFormat.formatSimple(new Date()));
}
}

 這里我使用的DownUtil工具類是我自己寫的,下來我粘到文章中

package org.cxxy.base.cxsc.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletResponse;
/**
 * @Title: DownUtil.java
 * @Package org.cxxy.base.cxsc.util
 * @Description:文件下載工具類
 * @author ChoviWu
 * @date 2017年6月18日 下午2:44:17
 * @version V1.0
 */
public class DownUtil {
  /**
   *
   * @Description:
   * @param @param response
   * @param @param url 文件在數(shù)據(jù)庫的路徑
   * @param @param base 文件存放的基礎(chǔ)路徑
   * @param @param folderPath 上傳所在的文件夾
   * @param @return
   * @param @throws IOException
   * @return int
   * @throws
   */
  @SuppressWarnings("unused")
  public static int downFile(HttpServletResponse response, String url,
      Integer down, String base, String folderPath) throws IOException {
    // 文件的名稱
    String fileName = url.split("/")[1];
    System.out.println(fileName);
    // 文件的后綴
    String last = url.substring(url.lastIndexOf(".") + 1);
    System.out.println(last);
    // 文件路徑
    String downFilePath = base + folderPath + fileName;
    Long fileLength = new File(downFilePath).length();// 文件的長度
    if (fileLength != 0) {
      response.reset();
      response.setContentType("application/octet-stream;charset=utf-8"); // 改成輸出excel文件
      try {
        response.setHeader(
            "Content-disposition",
            "attachment; filename="
                + new String(fileName.getBytes("utf-8"),
                    "ISO8859-1"));
        response.setHeader("Content-Length", String.valueOf(fileLength));
      } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
      }
      BufferedInputStream bis = null;
      BufferedOutputStream bos = null;
      FileInputStream fis = null;
      try {
        fis = new FileInputStream(downFilePath);
        bis = new BufferedInputStream(fis);
        // 輸出流
        bos = new BufferedOutputStream(response.getOutputStream());
        byte[] buff = new byte[2048];
        int bytesread;
        // 寫文件
        while (-1 != (bytesread = bis.read(buff, 0, buff.length))) {
          bos.write(buff, 0, bytesread);
        }
        // 跳轉(zhuǎn)的路徑
        fis.close();
        bis.close();
        bos.close();
      } catch (FileNotFoundException e) {
        System.out.println("File is Not Exsist!");
      }
    } else {
      // 拋異常
      response.getWriter()
          .write("<script charset='utf-8' type='text/javascript'>alert('該資源不存在!');history.go(-1);</script>");
      return down;
    }
    down++;
    return down;
  }
  /**
   *
   * @Description: 下載的模板
   * @param @param response
   * @param @param path 路徑名
   * @param @param name 模板名稱
   * @param @throws IOException
   * @return void
   * @throws
   */
  @SuppressWarnings("unused")
  public static void downMb(HttpServletResponse response, String path,
      String name) throws IOException {
    Long fileLength = new File(path).length();// 文件的長度
    System.out.println("文件的長度:" + fileLength);
    if (fileLength != 0) {
      response.reset();
      response.setContentType("application/octet-stream;charset=utf-8"); // 改成輸出excel文件
      try {
        response.setHeader(
            "Content-disposition",
            "attachment; filename="
                + new String(name.getBytes("utf-8"),
                    "ISO8859-1"));
        response.setHeader("Content-Length", String.valueOf(fileLength));
      } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
      }
      BufferedInputStream bis = null;
      BufferedOutputStream bos = null;
      FileInputStream fis = null;
      try {
        fis = new FileInputStream(path);
        bis = new BufferedInputStream(fis);
        // 輸出流
        bos = new BufferedOutputStream(response.getOutputStream());
        byte[] buff = new byte[2048];
        int bytesread;
        // 寫文件
        while (-1 != (bytesread = bis.read(buff, 0, buff.length))) {
          bos.write(buff, 0, bytesread);
        }
        fis.close();
        bis.close();
        bos.close();
      } catch (FileNotFoundException e) {
        System.out.println("File is Not Exsist!");
      }
    }
  }
}

 下來,我說一下,調(diào)用的downMb,我們都知道,在服務(wù)器上下載一個(gè)文件,

//設(shè)置響應(yīng)頭,控制瀏覽器下載該文件,形參調(diào)的是文件的長度
response.setHeader("Content-Length", String.valueOf(fileLength));
 //設(shè)置響應(yīng)類型,設(shè)置輸出流類型
response.setContentType("application/octet-stream;charset=utf-8"); // 改成輸出excel文件

 這里我使用的是輸出的Excel文件

接下來就是讀文件,寫文件了,相信學(xué)了java基礎(chǔ)的都會(huì)接觸IO吧,這里我就略過

BufferedInputStream bis = null;
BufferedOutputStream bos = null;

這里使用的是緩沖流,因其使用的是瀏覽器打開文件的下載

下來就是寫文件了,寫文件也是一貫的套路,先把文件存到buff數(shù)據(jù)緩沖區(qū),然后將buff的數(shù)據(jù)輸出到瀏覽器供用戶查看

byte[] buff = new byte[2048];
  int bytesread;
  // 寫文件
  while (-1 != (bytesread = bis.read(buff, 0, buff.length))) {
    bos.write(buff, 0, bytesread);
  }

當(dāng)讀寫完文件之后,千萬別忘了要關(guān)閉文件流(當(dāng)然,關(guān)閉流的順序也不能變)

fis.close();
bis.close();
bos.close();

以上所述是小編給大家介紹的JavaWeb響應(yīng)下載實(shí)例代碼(包含工具類),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java如何獲取一個(gè)隨機(jī)數(shù) Java猜數(shù)字小游戲

    Java如何獲取一個(gè)隨機(jī)數(shù) Java猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了Java如何獲取一個(gè)隨機(jī)數(shù),類似猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 詳解Java如何應(yīng)對(duì)常見的安全威脅和攻擊類型

    詳解Java如何應(yīng)對(duì)常見的安全威脅和攻擊類型

    隨著信息技術(shù)的快速發(fā)展,網(wǎng)絡(luò)安全問題日益突出,本文將以Java開發(fā)語言為例,深入探討網(wǎng)絡(luò)協(xié)議的安全性問題,通過分析常見的安全威脅和攻擊類型,設(shè)計(jì)和實(shí)施安全協(xié)議等主題,為讀者提供一些有益的思路和方法,需要的朋友可以參考下
    2023-11-11
  • Java 線程池核心參數(shù)、執(zhí)行流程與實(shí)戰(zhàn)建議全解析

    Java 線程池核心參數(shù)、執(zhí)行流程與實(shí)戰(zhàn)建議全解析

    主要介紹了 Java 線程池:核心參數(shù)、執(zhí)行流程與實(shí)戰(zhàn)建議,我將用最通俗的方式帶你搞懂 Java 線程池,從構(gòu)造函數(shù)開始,講透執(zhí)行機(jī)制、參數(shù)配置,再結(jié)合我在真實(shí)項(xiàng)目中的使用經(jīng)驗(yàn),總結(jié)出一套實(shí)戰(zhàn)建議,需要的朋友可以參考下
    2025-04-04
  • Java解壓zip文件完整代碼分享

    Java解壓zip文件完整代碼分享

    這篇文章主要介紹了Java解壓zip文件完整代碼分享,向大家分享了兩部分代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • 最詳細(xì)的Java循環(huán)結(jié)構(gòu)解析之for循環(huán)教程(適合小白)

    最詳細(xì)的Java循環(huán)結(jié)構(gòu)解析之for循環(huán)教程(適合小白)

    :循環(huán)結(jié)構(gòu)是指在程序中需要反復(fù)執(zhí)行某個(gè)功能而設(shè)置的一種程序結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于Java循環(huán)結(jié)構(gòu)解析之for循環(huán)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Netty結(jié)合Protobuf進(jìn)行編解碼的方法

    Netty結(jié)合Protobuf進(jìn)行編解碼的方法

    這篇文章主要介紹了Netty結(jié)合Protobuf進(jìn)行編解碼,通過文檔表述和代碼實(shí)例充分說明了如何進(jìn)行使用和操作,需要的朋友可以參考下
    2021-06-06
  • Springmvc和ajax如何實(shí)現(xiàn)前后端交互

    Springmvc和ajax如何實(shí)現(xiàn)前后端交互

    這篇文章主要介紹了Springmvc和ajax如何實(shí)現(xiàn)前后端交互,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • SpringBoot如何使用MyBatis-Plus實(shí)現(xiàn)高效的數(shù)據(jù)訪問層

    SpringBoot如何使用MyBatis-Plus實(shí)現(xiàn)高效的數(shù)據(jù)訪問層

    在開發(fā) Spring Boot 應(yīng)用時(shí),數(shù)據(jù)訪問是不可或缺的部分,本文將詳細(xì)介紹如何在 Spring Boot 中使用 MyBatis-Plus,并結(jié)合具體代碼示例來講解它的使用方法和常見配置,希望對(duì)大家有一定的幫助
    2025-04-04
  • java實(shí)現(xiàn)網(wǎng)頁驗(yàn)證碼功能

    java實(shí)現(xiàn)網(wǎng)頁驗(yàn)證碼功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)網(wǎng)頁驗(yàn)證碼功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • SpringbBoot實(shí)現(xiàn)Tomcat集群的會(huì)話管理的詳細(xì)過程

    SpringbBoot實(shí)現(xiàn)Tomcat集群的會(huì)話管理的詳細(xì)過程

    文章介紹了如何使用Nginx作為負(fù)載均衡器和SpringSession配合Redis實(shí)現(xiàn)Tomcat集群的會(huì)話共享,確保跨節(jié)點(diǎn)訪問時(shí)會(huì)話的一致性和持久性,通過具體的步驟和示例代碼,感興趣的朋友一起看看吧
    2024-12-12

最新評(píng)論

沁水县| 南丹县| 马公市| 茶陵县| 永和县| 安达市| 珠海市| 红安县| 墨玉县| 通化市| 济南市| 灵璧县| 丹江口市| 高清| 新乡市| 雷山县| 崇信县| 花莲市| 饶阳县| 肇源县| 玛多县| 油尖旺区| 永嘉县| 孝昌县| 兴国县| 吉安市| 宝坻区| 屏东县| 深圳市| 探索| 元江| 皮山县| 来安县| 翼城县| 上蔡县| 瑞金市| 赫章县| 德保县| 三门县| 沿河| 南华县|