您好,登錄后才能下訂單哦!
在創(chuàng)建一個(gè)文件夾,名稱download,先拷入要下載的一些文件
編寫下載的頁面,提供一些下載的超鏈接,點(diǎn)擊超鏈接,彈出下載的窗口
編寫下載的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);
//設(shè)置兩個(gè)頭一個(gè)流
// 設(shè)置第一個(gè)頭,值可以是MIME類型,可以獲取該文件的MIME類型
String type = this.getServletContext().getMimeType(filename);
response.setHeader("content-type",type);
// 先獲取到用戶使用的瀏覽器的信息,根據(jù)瀏覽器的信息采用不同的編碼,例如火狐,采用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("編碼后的內(nèi)容:"+name);
// 設(shè)置第二個(gè)頭
response.setHeader("content-disposition", "attachment;filename="+name);
// 一個(gè)流,先獲取到要下載的文件的輸入流,使用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();
}
/**
* 傳入文件的名稱,進(jìn)行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);
}
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。