pdf.js插件乱码问题
场景描述:
本问题也是之前谈论的pdf转化为图片的项目,之前有聊到过由于不能正常展示印章而把pdf转化成了PNG图片来展示。而其他的条款由于没有印章这个问题,所以就使用了pdf.js这个插件进行展示,之前展示的文件名都是用的英文是没有问题的。但是后来发现ios里面会展示出来这个名字,被用户看到后不便于理解,所以就想着要改为中文,那么问题就来了。
具体操作解决方案
接着说,直接将文件名改成中文后,发现一切并没有想象的那么简单,在加载pdf进行展示的时候发出错了,404。看里通过浏览器调试看地址也不是正常的,后在网上查询资料发现编码格式有问题,所以就把编码格式改为了gb2312。本地验证通过,心里挺高兴的,但是等我把代码发布到测试环境就由出现了问题。真是太奇葩了,奇葩年年有,今年特别多啊。
说一下本地和测试环境的差别吧,本地单机一个tomcat,测试环境是两台机器,F5负载均衡,然后还用了nginx做跳转。后来同事就说加个过滤器转码试试,想了想这个方法行得通,然后就开工了。加了一个过滤器,在过滤器中将请求地址打印了出来,然后进行转码再打印出来,经过和本地对比发现没有什么区别,但是为嘛就是本地不用filter转化再forward就可以,而测试环境就不行。感觉是跟F5和nginx有关系,但是就是不知道什么情况。还望有大神能解惑一下……
而且nginx 默认的不是charset utf-8;吗,但是我显式的写了这个就又乱码了,郁闷。
Filter代码
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
request.setCharacterEncoding("utf-8");
HttpServletRequest httpRequest = (HttpServletRequest) request;
String url = httpRequest.getRequestURL().toString();
logger.info("url地址原始" + url);
url = java.net.URLDecoder.decode(url, "UTF-8");
logger.info("url地址解码后" + url);
httpRequest.getRequestDispatcher(url.substring(url.lastIndexOf("/") + 1)).forward(request, response);
//httpResponse.sendRedirect(url);
//chain.doFilter(request, response);
}
配置如下
<filter>
<filter-name>urlFilter</filter-name>
<filter-class>com.test.UrlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>urlFilter</filter-name>
<url-pattern>*.pdf</url-pattern>
</filter-mapping>
参考
http://blog.csdn.net/zhengyang7754/article/details/47263599
http://blog.csdn.net/xiangcns/article/details/42089189
更多推荐
所有评论(0)