美文网首页
解决swfupload上传文件后,点击文件下载时,文件名出现中文

解决swfupload上传文件后,点击文件下载时,文件名出现中文

作者: 秋兔子的玩具 | 来源:发表于2018-07-05 15:28 被阅读0次

    由于同事离职需要接手一个开发进10年的struts项目,遇到了经典的中文乱码问题。
    好好的项目,怎么到了我的手里,上传文件就变成乱码了呢?
    仔细想想,排除了项目文件编码设置的情况,肯定是因为环境问题。
    对比了生产环境,结果发现tomcat配置不一样。

    这里先po出解决方案:

    在tomcat/conf/server.xml文件中,将Connector添加如下两项配置URIEncoding和useBodyEncodingForURI。

    <Connector port="8080" protocol="HTTP/1.1" 
    connectionTimeout="20000" redirectPort="8443" 
    URIEncoding="UTF-8" useBodyEncodingForURI="true"/>
    

    至于这两个配置的含义可以百度,大概意思如下:

    URIEncoding:对URI中出现的中文进行decode,解决X.do找不到执行类的问题。

    useBodyEncodingForURI:解决queryString参数的乱码问题。我的问题就是这个啦

    上述两个配置不指定,默认值为ISO-8859-1

    具体情况分析:

    1.调试前台js代码从uploadstart()直到上传成功,文件名显示正常,页面中文名链接渲染正常,说明问题不在js前端;
    2.请求跳转到后台Action后直接从request中拿到的filename就已经是乱码,并且基类中已经设置request.setCharacterEncoding("UTF-8");说明后台就是拿UTF-8去解析参数的,没有问题;
    3.中文乱码使用new String(fid.getBytes("ISO-8859-1"),"UTF-8")测试才为正常中文名称,说明中间被什么中间件给转成万恶的ISO-8859-1了,事实上,就是tomcat!

    心得体会:

    代码问题不大的话,优先检查环境!

    相关文章

      网友评论

          本文标题:解决swfupload上传文件后,点击文件下载时,文件名出现中文

          本文链接:https://www.haomeiwen.com/subject/jrjpuftx.html