JSP文件下载中文和空格显示Content-Disposition设置
Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。当 Internet Explorer 接收到头时,它会激活文件下载对话框,它的文件名框自动填充了头中指定的文件名。(请注意,这是设计导致的;无法使用此功能将文档保存到用户的计算机上,而不向用户询问保存位置。)
服务端向客户端游览器发送文件时,如果是浏览器支持的文件类型,一般会默认使用浏览器打开,比如txt、jpg等,会直接在浏览器中显示,如果需要提示用户保存,就要利用Content-Disposition进行一下处理,关键在于一定要加上attachment:
Response.setHeader("Content-Disposition","attachment;filename=FileName.txt");
备注:这样浏览器会提示保存还是打开,即使选择打开,也会使用相关联的程序比如记事本打开,而不是IE直接打开了。
另外原始的空格使用urlEncode 编码后转换为+号(基于历史原因),而ie解析时会直接作为+号处理,因此需要手工替换一下这个特殊字符 -->详细请看情况四
下面是各种响应头设置的情况演示:
情况一:(下载文件名为Download)
1.有文件扩展名
2.名字默认为Download
//得到要下载的文件名
String fileName = request.getParameter("filename");
System.out.println("fileName: " + fileName);
//设置响应头,控制浏览器下载该文件
response.setHeader("content-disposition","attachment;filename=" + fileName);

情况二:(下载文件名为spring+-+副本+%284%29)
1.没有文件扩展名
2.不能正常显示符号
//处理文件名
int index = fileName.lastIndexOf(".");
String realname = fileName.substring(0,index);
System.out.println("realname : " + realname);
//设置响应头,控制浏览器下载该文件
response.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode(realname, "UTF-8"));

情况三:(下载文件名为spring+-+副本+(2))
1.能正常显示符号
2.名字出现"+"
//设置响应头,控制浏览器下载该文件
response.setHeader("content-disposition","attachment;filename*=UTF-8''" + URLEncoder.encode(fileName,"UTF-8"));

情况四:(下载文件名为spring - 副本 (3))
1.能正常显示符号
2.解决名字出现"+"问题
//设置响应头,控制浏览器下载该文件
response.setHeader("content-disposition","attachment;filename*=UTF-8''" + URLEncoder.encode(fileName,"UTF-8").replaceAll("\\+", "%20"));

ok!