publicvoid doGet(HttpServletRequest request, HttpServletResponseresponse) throwsServletException, IOException {
// 1.接收参数
String filename = request.getParameter("filename");
// 解决get请求乱码问题
filename = new String(filename.getBytes("iso-8859-1"), "utf-8");
// 4.1此行代码已解决了乱码问题
String realPath = this.getServletContext().getRealPath("/download/" + filename);
// 2.设置2个头
// 动态获得文件MIME类型
String fileType = this.getServletContext().getMimeType(filename);
response.setHeader("Content-Type", fileType);
// 4.2解决下载页面文件的中文问题 IE使用的是URL编码,FireFox使用的是BASE64
// 获得请求头User-Agent
String header = request.getHeader("User-Agent");
if (header.contains("Firefox")) {
filename = base64EncodeFileName(filename);
或者是这样
byte[] bytes = filename.getBytes("UTF-8");
filename = new String(bytes,"ISO-8859-1");
} else {
filename =URLEncoder.encode(filename, "utf-8");
}
// 此头格式固定,设置之后,浏览器可以打开,但也会提示让你下载
response.addHeader("Content-Disposition", "attachment;filename=" + filename);
// 3.设置输入流
InputStream is = newFileInputStream(realPath);
OutputStream os = response.getOutputStream();
// 输入流与输出流对接
intlen = 0;
byte[] b = newbyte[1024];
while ((len = is.read(b)) !=-1) {
os.write(b, 0, len);
}
is.close();
}