·1. 文件下载的时候需要设置响应头
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" +fileName);
2.当文件名出现中文的时候,还需要解决文件名乱码的问题
在IE 和Chrome中使用
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
即可解决下载名称乱码的问题,但是在Firefox中依旧乱码,所以使用
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes("gbk"),"ISO-8859-1"));
可以实现在这三种浏览器中,下载名乱码的问题
除此之外,还可以对请求头进行判断
String name = "测试文件.txt";
String userAgent = request.getHeader("User-Agent");
name = userAgent.contains("MSIE") ? URLEncoder.encoder(fileName,"utf-8") : new String(name.getBytes("UTF-8");, "ISO-8859-1");
response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", name));