前言:
經常在網上點開一個鏈接,就可以讓你下載一個文件,比如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 3 4 5 6 |
<dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> |