文件下載時,對於不同的瀏覽器可能會存在文件名亂碼的問題,以下是我之前看到的一篇文章的解決方法,但是忘記文章的出處了,實在抱歉!
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String filepath = "c:/";// 需要下載的文件路徑
String filename = "文檔.doc";// 需要下載的文件名字
// 解決中文文件名亂碼問題
if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");// firefox瀏覽器
} else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
filename = URLEncoder.encode(filename, "UTF-8");// IE瀏覽器
}
response.reset();// 如果有換行,對於文本文件沒有什麼問題,但是對於其它格
// 式,比如AutoCAD、Word、Excel等文件下載下來的文件中就會多出一些換行符
// 0x0d和0x0a,這樣可能導致某些格式的文件無法打開,有些也可以正常打開。同//時response.reset()
// 這種方式也能清空緩衝區, 防止頁面中的空行等輸出到下載內容裏去
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
response.setHeader("Connection", "close");
ServletOutputStream sos = response.getOutputStream();
FileInputStream fis = null;
File d = new File(filepath);
if (d.exists()) {
fis = new FileInputStream(filepath);//
byte b[] = new byte[1000];
int j;
while ((j = fis.read(b)) != -1) {
try {
sos.write(b, 0, j);
} catch (IOException exp) {
}
}
fis.close();
sos.flush();
sos.close();
}
}