您好,登錄后才能下訂單哦!
在創建一個文件夾,名稱download,先拷入要下載的一些文件
編寫下載的頁面,提供一些下載的超鏈接,點擊超鏈接,彈出下載的窗口
編寫下載的Servlet類,完成下載
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 先獲取到文件的名稱
String filename = request.getParameter("filename");
// 解決中文亂碼
filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");
// System.out.println("要下載的文件名稱:"+filename);
//設置兩個頭一個流
// 設置第一個頭,值可以是MIME類型,可以獲取該文件的MIME類型
String type = this.getServletContext().getMimeType(filename);
response.setHeader("content-type",type);
// 先獲取到用戶使用的瀏覽器的信息,根據瀏覽器的信息采用不同的編碼,例如火狐,采用Base64編碼,使用IE采用的URL編碼
// 先判斷瀏覽器的信息
String agent = request.getHeader("user-agent");
// Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
// System.out.println(agent);
String name = null;
if(agent.contains("Firefox")){
// 使用是火狐,采用Base64編碼
name = base64EncodeFileName(filename);
}else{
// 使用的是IE或者谷歌,使用URL編碼
name = URLEncoder.encode(filename, "UTF-8");
}
System.out.println("編碼后的內容:"+name);
// 設置第二個頭
response.setHeader("content-disposition", "attachment;filename="+name);
// 一個流,先獲取到要下載的文件的輸入流,使用response對象的輸出流輸出到客戶端上,完成文件下載了
// 先獲取到要下載的文件的輸入流,先獲取到download文件夾 + filename 文件,獲取文件的輸入流了
String path = this.getServletContext().getRealPath("/download");
// System.out.println(path);
// 獲取文件的輸入流
InputStream in = new FileInputStream(path+"/"+filename);
// 獲取輸出流,不能new,使用response對象
OutputStream os = response.getOutputStream();
byte [] b = new byte[1024];
int len = 0;
while((len = in.read(b)) != -1){
os.write(b, 0, len);
}
in.close();
os.close();
}
/**
* 傳入文件的名稱,進行Base64編碼
* @param fileName
* @return
*/
public String base64EncodeFileName(String fileName) {
BASE64Encoder base64Encoder = new BASE64Encoder();
try {
return "=?UTF-8?B?"
+ new String(base64Encoder.encode(fileName
.getBytes("UTF-8"))) + "?=";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。