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(); } } } } } }参考文章
Spring MVC 文件下载及中文文件名乱码解决
