struts2 下载中文名文件 bug 未命名错误 乱码错误 不能满足适应大众三大浏览器
来源:互联网 发布:mac快捷键截图 编辑:程序博客网 时间:2024/05/16 01:36
- 一 struts.xml文件的编辑
- <struts>
- <package name="crud-default" extends="convention-default">
- <action name="download" class="com.myweb.download.DownLoadAction">
- <!--type 为 stream 应用 StreamResult 处理-->
- <result name="success" type="stream">
- <!--默认为 text/plain-->
- <param name="contentType">application/x-msdownload;charset=ISO8859-1</param>
- <!-- 默认就是 inputStream,它将会指示 StreamResult 通过 inputName 属性值的 getter 方法,
- 比如这里就是 getInputStream() 来获取下载文件的内容,意味着你的 Action 要有这个方法 -->
- <param name="inputName">inputStream</param>
- <!-- 默认为 inline(在线打开),设置为 attachment 将会告诉浏览器下载该文件,filename
- 指定下载文件时的文件名,若未指定将会是以浏览的页面名作为文件名,如以 download.action 作为文件名 -->
- <param name="contentDisposition">attachment;filename="${fileName}"</param>
- <!-- 输出时缓冲区的大小 -->
- <param name="bufferSize">4096</param>
- </result>
- </action>
- </package>
- </struts>
- 二,com.myweb.download.DownLoadAction 的文件的代码
- public class DownLoadAction extends ActionBase {
- private Logger logger = LoggerFactory.getLogger(DownLoadAction.class);
- private String fileName = null;
- public String execute() throws Exception {
- return "success";
- }
- public InputStream getInputStream() {
- this.fileName = json.substring(json.lastIndexOf("\\") + 1, json.length());
- return Struts2Utils.getSession().getServletContext().getResourceAsStream(json);
- }
- public String getFileName() {
- try {
- Struts2Utils.getResponse().setHeader("charset","ISO8859-1");
- return new String(this.fileName.getBytes(), "ISO8859-1");
- } catch (UnsupportedEncodingException e) {
- return "获取文件名出现了错误!";
- }
- }
- }
遇到的问题:
文件可以下载,但是在websphere环境下,下载的文件的中文名是乱码,解决问题的步骤如下:
第一,修改了struts.xml文件
第二,修改了DownLoadAction.java文件的getFileName方法
- public String getFileName() {
- try {
- return new String(this.fileName.getBytes(), "ISO8859-1");
- } catch (UnsupportedEncodingException e) {
- return "获取文件名出现了错误!";
- }
- }
在新弹出IE窗口中,第一次下载时,下载提示框中文仍然是乱码, 再次下载,就可以正常显示中文。整个应用软件包
的默认编码是UTF-8, 在第一次下载之后,客户端浏览器的默认编码被修改为ISO8859-1,再次下载中文就可以正常
显示,因为这时候IE浏览器的字符集编码是西欧ISO
如上图所示,浏览器的默认编码从UTF-8修改为西欧ISO
那我们又该如何解决这个第一次下载时出现乱码的问题呢?
第三,继续修改DownLoadAction.java文件的getFileName方法
public String getFileName() {
try {
//在服务器端通过设置http Header, 设置了客户端的默认的字符集编码
Struts2Utils.getResponse().setHeader("charset","ISO8859-1");
return new String(this.fileName.getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
return "获取文件名出现了错误!";
}
}
附: 如果整体修改为UTF-8下载反而会出现"未知的文件名"的错误提示,http请求中默认的编码有可能是ISO8859-1
**************************************************************博主修改***************************************************************
附:不能适应所有浏览器 chrome firefox 以上处理可以实现不乱码 但是IE浏览器不可以 用IE11测试不成功, 本文一下一篇有介绍使用所有浏览器的struts2 中文名称下载乱码问题
- struts2 下载中文名文件 bug 未命名错误 乱码错误 不能满足适应大众三大浏览器
- Struts2文件下载中文名乱码
- 解决struts2 下载中文名称乱码问题 适应不同三大主流浏览器 chrome28.0.1500.95、 firefox 23.0.1 、 IE11
- 浏览器 下载 中文名 乱码 解决方案
- 文件下载时中文名乱码
- firefox下载中文名文件乱码
- 下载文件:中文名乱码问题
- struts2文件上传时,中文名乱码
- asp.net 下载文件 中文名乱码
- Android 文件下载中文名乱码的解决办法
- 下载文件中文名出现乱码 java
- 下载时的中文名文件乱码
- javaweb文件下载中文名乱码问题
- Firefox下载文件时中文名乱码问题
- java下载文件的时候中文名乱码
- Java文件下载中文名不显示&乱码
- Android 文件下载中文名乱码的解决办法
- Firefox下载文件时中文名乱码问题
- uva 10879 Code Refactoring
- 判断ios设备方向。
- 457 - Linear Cellular Automata 细胞的线性自动变换机制
- JAVA可变参数
- 如何写makefile文件
- struts2 下载中文名文件 bug 未命名错误 乱码错误 不能满足适应大众三大浏览器
- poj 1012 Joseph
- SQLite学习手册(目录)
- ASP.NET面试题(推荐_有答案)
- dubbo小教程
- 实例解析linux内核I2C体系结构(1)
- iOS 程序打包
- JSch:纯JAVA实现远程执行SSH2主机的SHELL命令
- NSUserDefaults的应用和特点