在web开发中,文件下载的时候,如果文件名称出现中文和空格,这个时候,就会出现问题。
1、中文乱码
2、空格
a)IE下变为+
b)Firefox下回截断文件名
针对这两个问题,相应的解决方案;
1、首先判断浏览器类型:
更加http请求头中的“USER-AGENT”来判断
// 简单判断ie
public static boolean isIE(){
return request.getHeader( "USER-AGENT" ).toLowerCase().indexOf( "msie" ) > 0 ? true : false ;
}
// 详细的可以参考
// *****根据 User Agent String 判断客户端平台及浏览器的 Java 程序*****
// http://blog.csdn.net/defonds/article/details/8128165
2、文件名的处理
ie空格的处理:空格 --》 “+”
firefox空格的处理:空格节点文件名
代码如下:
public void downLoadFile(InputStream ins, String fileName){
//1.判断ie
boolean isMSIE = isMSIE();
//2.文件名处理
if (isMSIE){// IE
fileName = URLEncoder.encode(fileName, "utf-8");
fileName = fileName.replace("+", "%20");// 处理空格变“+”的问题
} else {// FF
fileName = new String(fileName.getBytes("utf-8"), "iso-8859-1");
}
//3.准备响应头
//这里filename用“"”英文的双引号扣起来,可以防止firefox空格节点文件名的问题
response.setHeader("content-disposition", "attachment;filename=\"" + fileName + "\"");
response.setContentType("application/octet-stream");
//4.下载,注意IO异常的处理
os = response.getOutputStream();
byte [] cache = new btye[1024];
int length = ins.read(cache);
while (length != -1){
os.wirt(cache,0,length);
length = ins.read(cache);
}
}
关键是:
1、ie下replace
2、firefox下,filename要用双引号括起来