servlet實現下載功能
package com.itheima.content;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import sun.misc.BASE64Encoder;
public class DownLoadServlet2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//*******檔名稱是中文的下載*******
//獲得要下載的檔案的名稱
String filename = request.getParameter("filename");//????.jpg
//解決獲得中文引數的亂碼----下節課講
filename = new String(filename.getBytes("ISO8859-1"),"UTF-8");//美女.jpg
//獲得請求頭中的User-Agent
String agent = request.getHeader("User-Agent");
//根據不同瀏覽器進行不同的編碼
String filenameEncoder = "";
if (agent.contains("MSIE")) {
// IE瀏覽器
filenameEncoder = URLEncoder.encode(filename, "utf-8");
filenameEncoder = filenameEncoder.replace("+", " ");
} else if (agent.contains("Firefox")) {
// 火狐瀏覽器
BASE64Encoder base64Encoder = new BASE64Encoder();
filenameEncoder = "=?utf-8?B?"
+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
} else {
// 其它瀏覽器
filenameEncoder = URLEncoder.encode(filename, "utf-8");
}
//要下載的這個檔案的型別-----客戶端通過檔案的MIME型別去區分型別
response.setContentType(this.getServletContext().getMimeType(filename));
//告訴客戶端該檔案不是直接解析 而是以附件形式開啟(下載)----filename="+filename 客戶端預設對名字進行解碼
response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder);
//獲取檔案的絕對路徑
String path = this.getServletContext().getRealPath("download/"+filename);
//獲得該檔案的輸入流
InputStream in = new FileInputStream(path);
//獲得輸出流---通過response獲得的輸出流 用於向客戶端寫內容
ServletOutputStream out = response.getOutputStream();
//檔案拷貝的模板程式碼
int len = 0;
byte[] buffer = new byte[1024];
while((len=in.read(buffer))>0){
out.write(buffer, 0, len);
}
in.close();
//out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
相關文章
- 使用Servlet實現檔案下載Servlet
- Flutter 實現檔案下載功能Flutter
- Java實現檔案下載功能Java
- servlet上傳下載Servlet
- APICloud 實現文件下載和預覽功能APICloud
- JSP(ajax)+Servlet實現簡單的登入功能JSServlet
- Servlet的實現Servlet
- 教你如何實現c#檔案上傳下載功能C#
- 載入更多 功能的實現
- Flutter實現檔案下載Flutter
- AJAX實現檔案下載----
- Java Servlet session實現登入退出JavaServletSession
- JAVAEE_Servlet_24_HttpSession實現原理JavaServletHTTPSession
- SpringMVC的下載功能SpringMVC
- VirtualView iOS 模板載入功能實現詳解ViewiOS
- 標籤實現預載入功能詳解
- uni-app中安卓包檢查更新、新版本下載、下載進度條顯示功能實現APP安卓
- 前端方式實現excel下載前端Excel
- vc實現https檔案下載HTTP
- 驚了!7 行程式碼優雅地實現 Excel 檔案生成&下載功能行程Excel
- <link>標籤實現預載入功能詳解
- Lambda@edge 實現負載均衡器功能負載
- 常見下載方式之BT下載實現過程詳解
- Servlet實現、與html的簡單互動ServletHTML
- python實現郵件接收、附件下載Python
- 前端實現點選下載圖片前端
- js實現txt/excel檔案下載JSExcel
- 2020JavaWeb實現檔案下載JavaWeb
- Feign實現檔案上傳下載
- js下載檔案的實現方式JS
- Python3實現搶火車票功能(下)Python
- 在electron下實現PDF線上預覽功能
- LVS和Nginx實現負載均衡功能的比較Nginx負載
- php匯入功能,模板下載PHP
- SpringBoot專案Excel下載功能Spring BootExcel
- 如何實現 AppStore App 的自動下載APP
- OkHttp優雅的實現下載監聽HTTP
- SpringMVC實現檔案上傳&下載(2)SpringMVC