一般是避免用中文名做图片名字的,这次碰到特殊需求。
查找了下网上的资料,大概有这么几种说法:
- img标签的src属性做Encode,尝试无效
- 更改tomcat配置,加入 URIEncoding为UTF-8。这个理论上应该是有效的,但是具体到自己的项目中,无效。
- 过滤器,过滤图片资源的解析。
其实这个问题的产生,根源于Tomcat默认是用ISO-8859-1来传递URI的。所以我认为方法2、3应该是有用的。
最后的解决方案,是模拟3的原理,自己写一个jsp,来读取图片资源。
<%@page language="java" pageEncoding="UTF-8" contentType="image/png"%>
<%
String name = request.getParameter("name");
if(name == null || name.isEmpty())
return;
name = new String(name.getBytes("ISO-8859-1"), "utf-8");
String path = application.getRealPath(request.getRequestURI());
File cur = new File(path);
File parent = new File(cur.getParent());
File image = new File(parent.getParent() + "\\images" + "\\" + name);
if(!image.exists()) return;
FileInputStream fileStream = new FileInputStream(image);
//设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
OutputStream os = response.getOutputStream();
int size = 1024*6;
byte[] buffer = new byte[size];
int read;
while((read = fileStream.read(buffer)) > 0){
os.write(buffer, 0, read);
}
os.flush();
os.close();
%>