下载文档--Struts2中国人似乎是空文件下载格问题

前言:近期公司项目中用到文件下载,依据底层,决定使用struts2的文件下载模式。

乱码大多数都攻克了,竟然出现中文文件下载时,中文文字显示为空格的奇葩现象。在经过近三个小时的查询各种文档和苦思冥想,终于发现了问题。见网上还没有战友发出这个现象的文章,所以就写出来,分享给大家。

Struts2的配置文件里:

<!--数据文件下载 -->

<actionname="downloadTemplFile" class="fileDownloadAction">

<result name="success" type="stream">

<paramname="contentType">text/plain</param>

<paramname="contentType">application/octet-stream;charset=ISO8859-1</param>

<paramname="contentDisposition">attachment;fileName="${downloadFileName}"</param>

<paramname="inputName">inputStream</param>

<paramname="bufferSize">1024</param>

</result>

</action>

Java的使用方式:

publicString getDownloadFileName() {

String fileName1 =ServletActionContext.getRequest().getParameter("fileName");

try {

fileName1= new String(fileName1.getBytes("ISO8859-1"), "utf-8");

}catch (UnsupportedEncodingException e1) {

e1.printStackTrace();

}

String downFileName = fileName1;

try {

downFileName = newString(downFileName.getBytes(), "ISO8859-1");

} catch (Exception e) {

e.printStackTrace();

}

System.out.println("downFileName====================>"+downFileName);

return downFileName;

}

publicInputStream getInputStream() throws Exception{

String  fileName1 =ServletActionContext.getRequest().getParameter("fileName");

Stringname = new String(fileName1.getBytes("ISO8859-1"),"utf-8");

System.out.println("name===========>"+name);

InputStreamin =ServletActionContext.getServletContext().getResourceAsStream("/custMonitorFile/"+name);

System.out.println(in);

returnin;

}

@Override

publicString execute() throws Exception {

return SUCCESS;

}

说明:

为什么Java源代码中转两次?

回答:

//第一次 从jsp的get或者post获取的字段须要转码。

String fileName1 =ServletActionContext.getRequest().getParameter("fileName");

fileName1 = newString(fileName1.getBytes("ISO8859-1"), "utf-8");

//第二次 设置中文文件名称要以“ISO8859-1”的格式发给client。

String downFileName = fileName1;

downFileName = newString(downFileName.getBytes(), "ISO8859-1");

注意:一定要弄清楚每次转码的目的,始发与终点。

如有好的建议,可留言或发至笔者邮箱:fzb_xxzy@163.com

版权声明:本文博客原创文章,博客,未经同意,不得转载。

最新文章

  1. [ZZ] Equal Error Rate (EER)
  2. ROS 新手教程 命令汇总
  3. ovirt-engine安装
  4. SQL基础之数据库
  5. highchart 设置双Y轴坐标 双x轴坐标方法
  6. jquery+php实现用户输入搜索内容时自动提示
  7. Android WebView与JavaScript交互操作(Demo)
  8. Java线程状态:BLOCKED与WAITING的区别
  9. 2^x mod n = 1 【杭电-HDOJ-1395】 附题
  10. slf自己主动绑定实现类过程推断
  11. 巧用UserAgent来解决浏览器的各种问题
  12. HDU 1175 连连看 (DFS+剪枝)
  13. PHP实现简单发红包(随机分配,平均分配)
  14. Json序列化提示缺少编译器要求的成员“ystem.Runtime.CompilerServices.ExtensionAttribute..ctor”
  15. Yii 的session 实现返回上上页面
  16. rails安装使用版本控制器的原因。
  17. 使用位图文本工具BMFont从图片生成自定义字体
  18. 0429团队项目-Scrum团队成立
  19. 洛谷P1106 删数问题
  20. [golang note] 包和导入

热门文章

  1. petshop4.0 其中详细解释(系统架构)
  2. Sliverlight之 画刷
  3. 用golang写的 分解x86 intel boot/recovery工具
  4. Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树动态规划)
  5. Property &amp;#39;sqlSessionFactory&amp;#39; or &amp;#39;sqlSessionTemplate&amp;#39; are required
  6. 文章3说话 微信商城云server创建后台
  7. 如何区分MNO和MVNO
  8. linux学习(一个) 在unbuntu通过添加新的用户
  9. [Django1.6]south于django1.6使用
  10. Socket方法LAN多线程文件传输