使用response下載文件


前言:

經常在網上點開一個鏈接,就可以讓你下載一個文件,比如jar,jdk等的文件。就通過response實現這種下載文件、

實現步驟:

1.要獲取下載文件的路徑
2.下載的文件名是啥?
3.設置想辦法讓瀏覽器能夠支持下載我們需要的東西
4.獲取下載文件的輸入流
5.創建緩沖區
6.獲取OutputStream對象
7.將FileOutputStream流寫入到buffer緩沖區
8.使用OutputStream將緩沖區中的數據輸出到客戶端!

代碼:

在maven項目的resources下放一個圖片,這樣項目發布的時候,用戶就可以點擊鏈接下載對應的文件:

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import java.net.URLEncoder;

public class Resopn下載文件 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1、獲取要下載文件的絕對路徑
        String realPath = "F:\\Maven\\web-maven\\servlet-03\\target\\classes\\壁紙.png";
        System.out.println("下載的文件路徑" + realPath);
        //2、下載的文件名是什么[截取文件絕對路徑的最后一個\后面的字符//右鍵復制的路徑【可以】F:\Maven\web-maven\servlet-03\target\classes\壁紙.png
        String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
        //3、讓瀏覽器能夠支持我們下載的文件[如果文件名是中文就需要轉碼]
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        //4、獲取下載文件的輸入流
        FileInputStream fis = new FileInputStream(realPath);
        //5、創建緩沖區
        int len = 0;
        byte[] bytes = new byte[1024];
        //6、創建輸出流
        ServletOutputStream sot = response.getOutputStream();
        //7、寫出文件
        while ((len = fis.read(bytes)) != -1) {
            sot.write(bytes, 0, len);
            sot.flush();
        }
        //8、關閉流
        sot.close();
        fis.close();
    }
}

先碼后看,這里沒有什么難理解的,就是第三步是比較生疏的,要用的話就上網查詢一下就好了。

 拓展:

1、點擊一個鏈接,或者是超鏈接,或者是表單,就可以下載資源就很好。

所以我們新增一個JSP頁面,讓用戶點擊這個頁面上面的按鈕,進行下載文件:

 

 

2、EL, Expression Language,表達式語言,是一種在JSP頁面中獲取數據的簡單方式。EL表達式是從JSP2.0版本開始才引入的概念。EL表達式的基本語法形式很簡單:在JSP頁面的任何靜態部分均可通過${變量}的形式獲取到指定表達式的值。

3、解釋一下${pageContext.request.contextPath}取出部署的應用程序名或者是當前的項目名稱

 

 

 

4、注意:如果EL表達式沒有提示的話,就在Maven項目中的pro.xml文件中添加:

 

1
2

3

4

5

6

<dependency>

      <groupId>javax.servlet</groupId>

      <artifactId>jsp-api</artifactId>

      <version>2.0</version>

      <scope>provided</scope>

</dependency>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM