您的位置:首页 > 其它

使用Content-Disposition: attachment; filename=FILENAME,在Firefox浏览器中下载文件,文件名中文乱码问题解决。

2016-12-16 21:25 1036 查看
FILENAME为我们要下载的文件的文件名(包含后缀),RFC 2183规定FILENAME只能为US-ASCII码,然而现代浏览器中许多已经支持UTF-8编码了,但各个浏览器的支持规则不同。在IE、chrome中,可以直接用FILENAME作为下载文件的名称,但是Firefox却不支持这样。我们直接上代码吧。

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//获取文件路径并创建一个出入流
String path = this.getServletContext().getRealPath("/WEB-INF/classes/囧雪.jpg");
FileInputStream fis = new FileInputStream(path);

//创建输出流,向客户端输出数据
ServletOutputStream sos = response.getOutputStream();

//获取文件名
String fileName = path.substring(path.lastIndexOf('\\') + 1);
//文件名转码
fileName = URLEncoder.encode(fileName, "UTF-8");
//告诉客户端以什么解码方式打开文件
//response.setContentType("UTF-8");

//告诉客户端下载文件
if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > -1)
{
response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + fileName);
System.out.println("firefox");
} else {
response.setHeader("content-disposition", "attachment; filename=" + fileName);
}
//response.setHeader("content-disposition", "attachment; filename=" + fileName);
response.setHeader("content-type", "img/jpeg");

//输出
byte[] buf = new byte[1024];
int len = -1;
while((len = fis.read(buf)) != -1) {
sos.write(buf, 0, len);
}

//关流
sos.close();
fis.close();
}
response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + fileName);
这一句代码即可解决火狐浏览器中下载文件的中文乱码问题。真奇怪,以为UTF-8后直接加个空的单引号对,但它确实是这么用的。

完。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  firefox 乱码
相关文章推荐