这里用的是spring框架注解方式,该方法最后没有出现文件名显示乱码问题
@RequestMapping(params = "actionMethod=downloadFile", method = RequestMethod.GET)
public void downLoad(HttpServletRequest request,HttpServletResponse response, Model model) throws Exception {
log.debug("show StocktakeManageController download-->");
// 得到要下载的文件名
String fileName = request.getParameter("fileName");
// fileName = new String(fileName.getBytes("iso8859-1"),"UTF-8");
// 处理中文乱码时注释掉的
// fileSaveRootPath=this.getServletContext().getRealPath("/WEB-INF/upload");
// 一般情况下上传文件存放的位置
// 由于上传文件的地址已经在parameter.properties文件中指定,此处通过框架获取
String filePath = Parameter.getInstance().getProp()
.getProperty("filePath");
// 下载的根路径
File filePathF = new File(filePath
+ System.getProperty("file.separator")
+ request.getParameter("queryId"));
// 下载路径名
String fileSavePath = filePathF + File.separator + fileName;
// 得到要下载的文件
FileInputStream in = new FileInputStream(fileSavePath);
// 设置响应头,控制浏览器下载该文件
// 1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
response.setContentType("multipart/form-data");
// 2.设置文件头
String userAgent = request.getHeader("User-Agent");
if (StringUtils.isBlank(userAgent)) {
fileName = URLEncoder.encode(fileName, "UTF-8");
} else {
if (userAgent.indexOf("MSIE") != -1) {
// IE使用URLEncoder
fileName = URLEncoder.encode(fileName, "UTF-8");
} else {
// FireFox使用ISO-8859-1
fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
}
}
response.setHeader("Content-Disposition", "attachment;fileName="
+ fileName);
response.setHeader("Cache-Control",
"must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setDateHeader("Expires", (System.currentTimeMillis() + 1000));
// 读取要下载的文件,保存到文件输入流
// 创建输出流
OutputStream out =null;
try {
out = response.getOutputStream();
// 创建缓冲区
byte buffer[] = new byte[1024];
int len = 0;
// 循环将输入流中的内容读取到缓冲区当中
while ((len = in.read(buffer)) > 0) {
// 输出缓冲区的内容到浏览器,实现文件下载
out.write(buffer, 0, len);
}
} catch (IOException e) {
//e.printStackTrace();
} finally {
// 关闭文件输入流
in.close();
// 关闭输出流
out.close();
}
}