文件下载的关键两步骤:
//要下载的这个文件的类型-----客户端通过文件的MIME类型去区分类型
response.setContentType(this.getServletContext().getMimeType(filename));
//告诉客户端该文件不是直接解析 而是以附件形式打开(下载)
response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder);
如果文件中出现了中文乱码的错误,添加一下代码: (以下代码要添加到上面两行的上面)
filename = new String(filename.getBytes("ISO8859-1"),"UTF-8");//解决乱码问题 filename=文件名
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");
}
原因:为什么在设置了new String(filename.getBytes("ISO8859-1"),"UTF-8");之后,下载中文文件为什么文件名为空?
解答:filename="+filenameEncoder 客户端默认对名字进行解码,不同的客服端解码的方式不同。如果没有上述语句的话,也就是filename还没有进行编码,那怎么能够解码呢,自然而然的,filename=""。