文件下載
1.獲取要下載的文件的絕對路徑
但是使用getServletContext().getRealPath()方法在不同的服務器上所獲得的實現是不一樣的
因為項目被打包入.war文件以后就失去了原來的目錄結構,使用獲取絕對路徑的方法返回為NULL
在這里我們可以使用另一個方法getResourceAsStream()獲取路徑
String realPath = this.getServletContext().getRealPath("/download/1.jpg");
InputStream inputStream = this.getServletContext().getResourceAsStream("/download/1.jpg");
2.獲取要下載的文件名
String fileName = realPath.substring(realPath.lastIndexOf("\")+);
使用getResourceAsStream()方法時由於沒有返回一個路徑。所以這里的文件名需要自己賦值
String fileName = "1.jpg";
3.設置content-disposition響應頭控制瀏覽器以下載文件的形式打開文件
response.setHeader("content-disposition", "attachment;filename=" + fileName);
4.獲取要下載的文件輸入流
InputStream in = new FileInputStream(realPath);
int len = 0;
這里的步驟中由於realPath不再使用。所以輸入流in可以不用。
5.創建數據緩沖區
byte[] buffer = new byte[1024];
6.通過response對象獲取OutputStream流
OutputStream out = response.getOutputStream();
7.將FileInputStream流寫入到buffer緩沖區
while((len = in.read(buffer)) > 0){ //這里的in換成inputStream
8.使用OutputStream將緩沖區的數據輸出到客戶端瀏覽器
out.write(buffer, 0, len);
}
9.關閉輸入流
in.close(); //這里同理

測試結果
