解决图片中文名的相应问题,目前试过两种可行方法。
因为前端、后端都是使用的utf-8编码,所以可以修改tomcat中server.xml配置中的
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" />,添加URIEncoding="utf-8",
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>
这个是最简单的方法,个人测试是有效的,但是觉得改这个配置文件不是很好。后来使用的过滤器的方法,通过特征拦截需要响应的图片请求,自己将文件名解析并响应给页面。
web.xml中配置了两个过滤器,一个是一般处理乱码的过滤器,一个是处理图片中文文件名的过滤器。一般处理乱码过滤器要放在在前面。
需要处理的图片位置,可以根据不同需求修改,这里直接放到指定文件夹upload下面,操作简单
页面标签
filter代码
这里有3点说明:
1:向页面响应需要设置mime头。当我把mime去掉,并且GenericEncodingFilter在处理图片过滤器之前面,会出问题,img标签中的图片仍然显示正常,但是当点击链接看大图的时候页面会乱码,经过F12检查,是由于GenericEncodingFilter在响应的时候添加了text/html头造成的。
如果将UploadFilter配置在GenericEncodingFilter前面就不会出现问题,F12检查没有响应头,但是显示正常。我也不懂为什么。
2:因为这里响应图片需要获取到绝对路径,所以将config作为成员变量,但绝的不是很好,不过没想到方法。也可以使用配置文件。
3:我这里响应的是原生的io流,可以考虑使用commons-io包下的FileUtils类中的方法,应该更高效。