//获得下载文件的名称
String filename = request.getParameter(“filename”);
//解决获得中文参数的乱码
filename = new String(filename.getBytes(“ISO8859-1”),“UTF-8”);
//获得请求头的User-Agent
String agent = request.getHeader(“User-Agent”);
//根据不同的浏览器进行不同的编码
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”);
}
//要下载的这个文件的类型 -----客户端根据mime类型区分别
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();
//实现文件的拷贝
int len = 0;
byte[] bytes = new byte[1024];
while((len=is.read(bytes))>0) {
out.write(bytes,0,len);
}
is.close();
//out会自动关闭