1.實現步驟
//1.獲取下載路徑和 獲取下載文件名稱(重點)
//2.設置頭爲下載文件頭(重點)
//3.使用之前的IO緩衝輸出文件
2.核心代碼
設置文件頭文下載頭
//2.設置頭爲下載文件頭(重點)
resp.setHeader("Content-Disposition","attachment;filename=圖片"+ URLEncoder.encode(fileName, "UTF-8"));
3.實現代碼
package com.bmft;
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.URLEncoder;
/**
* 這個類用於實現文件的下載
* //1.獲取下載路徑和 獲取下載文件名稱(重點)
* //2.設置頭爲下載文件頭(重點)
* //3.使用之前的IO緩衝輸出文件
*/
public class DownLoadFile extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.獲取下載路徑和獲取下載文件名稱\
String absolutePath = "C:\\Users\\25301\\Pictures\\壁紙\\高清後\\coffeeGirl.jpg";
//一種自動獲取文件名稱的方式,也可用分割實現
String fileName = absolutePath.substring(absolutePath.lastIndexOf("\\") + 1);
//2.設置頭爲下載文件頭(重點)
resp.setHeader("Content-Disposition", "attachment;filename=圖片" + URLEncoder.encode(fileName, "UTF-8"));
//3.使用之前的IO緩衝輸出文件
FileInputStream fileInputStream = new FileInputStream(absolutePath);
int length = 0;
byte[] bytes = new byte[1024 * 10];
ServletOutputStream outputStream = resp.getOutputStream();
while ((length = fileInputStream.read(bytes)) > 0) {
outputStream.write(bytes, 0, length);
}
fileInputStream.close();
outputStream.close();
System.out.println("圖片下載成功");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
4.映射
<!-- 一、註冊 -->
<servlet>
<servlet-name>DownLoadFile</servlet-name>
<servlet-class>com.bmft.DownLoadFile</servlet-class>
</servlet>
<!-- 二、映射 -->
<servlet-mapping>
<servlet-name>DownLoadFile</servlet-name>
<url-pattern>/DownLoadFile</url-pattern>
</servlet-mapping>