来源:http://www.iteye.com/topic/699246
一、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
相关推荐
struts2.2.1文件下载及中文乱码问题解决.pdf
Struts2下载文件时中文乱码和空格处理
Struts实现文件下载中文乱码解决方案收藏
Struts2文件上传下载 上传为单个上传, 下载包括中文乱码的问题:前台传后台时中文乱码,下载时显示时中文乱码,以及URLEncoder
struts中文乱码问题解决详细步骤(两种方法)
在struts2中解决页面中出现的乱码问题,写在web.xml中
关于StrutsPrepareAndExecuteFilter最新的过滤器,在Struts.xml定义常量<constant name="struts.i18n.encoding" value="UTF-8"/>...关于Struts2各个版本、各种过滤器,用get方式提交都方法都无法解决的中文乱码问题。
Myeclipse 6.5, JDK1.6,Tomcat 6.0 未解决点击取消报错的问题,可能是jdk版本问题
解决中文乱码的问题
struts2配置文件传值中文乱码
Struts中文乱码解决方案
很受网络上庞杂的Struts2上传下载的误导,很多没有解决中文乱码问题,本例实现了Struts2批量上传与下载,中文乱码问题完美解决,供大家参考!
struts2中存在中文乱码的问题解决方 中文乱码,首先要区分是页面乱码、action乱码,还是数据库乱码。 大致的原理是java使用unicode编码-->window使用gbk(gb2312的扩展集)--mysql默认使用utf-8(unicode的一种编码...
struts2实现文件上传。解决中文url和中文文件名乱码问题
struts 中文乱码问题解决
解决Struts2下载中文出现乱码情况,已通过测试,
简单的下载文件代码,下载中文附件,下载已经存在的文件方案介绍
Struts2资源文件在jsp页面中显示乱码解决
奇怪的struts2的中文乱码问题及解决.docx