关于Tomcat文件下载中文名乱码现象
//獲得下載文件的名稱
String filename = request.getParameter(“filename”);
//解決獲得中文參數(shù)的亂碼
filename = new String(filename.getBytes(“ISO8859-1”),“UTF-8”);
//獲得請求頭的User-Agent
String agent = request.getHeader(“User-Agent”);
//根據(jù)不同的瀏覽器進(jìn)行不同的編碼
String filenameEncode = “”;
if (agent.contains(“MSIE”)) {
// IE瀏覽器
filenameEncode = URLEncoder.encode(filename, “utf-8”);
filenameEncode = filename.replace("+", " ");
} else if (agent.contains(“Firefox”)) {
// 火狐瀏覽器
BASE64Encoder base64Encoder = new BASE64Encoder();
filenameEncode= “=?utf-8?B?”
+ base64Encoder.encode(filename.getBytes(“utf-8”)) + “?=”;
} else {
// 其它瀏覽器
filenameEncode = URLEncoder.encode(filename, “utf-8”);
}
//要下載的這個文件的類型 -----客戶端根據(jù)mime類型區(qū)分別
??response.setContentType(this.getServletContext().getMimeType(filename));
??//告訴客戶端該文件不是直接解析,而是以附件形式打開,注意filename=
??response.setHeader(“Content-Disposition”, “attachment;filename=”+filenameEncode);
??
??//獲取下載文件的絕對路徑(相對于apach而言)
??String path = this.getServletContext().getRealPath(“download/”+filename);
??//獲取該文件的輸入流
??InputStream is = new FileInputStream(path);
??//獲取輸出流
??ServletOutputStream out = response.getOutputStream();
??//實(shí)現(xiàn)文件的拷貝
??int len = 0;
??byte[] bytes = new byte[1024];
??while((len=is.read(bytes))>0) {
???out.write(bytes,0,len);
??}
??is.close();
??//out會自動關(guān)閉
總結(jié)
以上是生活随笔為你收集整理的关于Tomcat文件下载中文名乱码现象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: servlet下载文件(注意文件名字必须
- 下一篇: 固原看男性不育最好的医院推荐