1、首先需要对下载的URL的文件名进行编码
在jsp/html页面的下载链接为
/download.html?fileName="+encodeURI(filename);
2.在springmvc的Controller里也需要对文件名进行解码
@RequestMapping(value = "/download.html")
public void download(@RequestParam String fileName,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
fileName =new String(fileName.getBytes("ISO8859-1"),"UTF-8");
if (fileName != null) {
String realPath = request.getSession().getServletContext().getRealPath("/"); //tomcat6下可获取工程目录
File file = new File(realPath, fileName);
if (file.exists()) {
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition",
"attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));// 文件名为中文时,需要对fileName设置编码,不然下载文件为download.html
byte[] buffer = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
OutputStream os = response.getOutputStream();
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
参考文章