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實現檔案下載demoServlet
- 使用Servlet實現檔案下載Servlet
- Flutter 實現檔案下載功能Flutter
- Java實現檔案下載功能Java
- Django 實現下載檔案功能Django
- Servlet下載檔案Servlet
- Servlet實現匯出下載csv檔案Servlet
- 樹莓派搭建個人 NAS 下載機(實現離線下載功能)樹莓派
- APICloud 實現文件下載和預覽功能APICloud
- 用C++實現下載檔案的功能C++
- JSP(ajax)+Servlet實現簡單的登入功能JSServlet
- Android實現zip檔案下載和解壓功能Android
- Servlet的實現Servlet
- Jsp+Servlet實現檔案上傳下載(一)--檔案上傳JSServlet
- 教你如何實現c#檔案上傳下載功能C#
- ThinkPHP實現百度網盤下載功能,必備!PHP
- 載入更多 功能的實現
- servlet檔案下載例項剖析Servlet
- rshiny1:簡單的接入api實現下載功能API
- struts實現下載篇
- js和其他後臺語言結合實現附件下載功能JS
- Flutter實現檔案下載Flutter
- AJAX實現檔案下載----
- uni-app中安卓包檢查更新、新版本下載、下載進度條顯示功能實現APP安卓
- Linux下VLAN功能的實現 (轉)Linux
- android: 實現強制下線功能Android
- 基於servlet的檔案上傳和下載Servlet
- 標籤實現預載入功能詳解
- django 實現滾動載入的功能薦Django
- Java Servlet session實現登入退出JavaServletSession
- web書城專案-servlet實現WebServlet
- 前端方式實現excel下載前端Excel
- Weex 實現檔案的下載
- 利用IhttpHandler實現檔案下載HTTP
- 驚了!7 行程式碼優雅地實現 Excel 檔案生成&下載功能行程Excel
- SpringMVC的下載功能SpringMVC
- 在electron下實現PDF線上預覽功能
- Android下實現資料繫結功能Android