文件下载--Struts2的中文文件下载显示为空格问题

文件下载--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”的格式发给客户端。

String downFileName = fileName1;

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

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

如有好的建议,可留言或发至笔者邮箱:fzb_xx[email protected]

时间: 2024-08-28 19:07:50

文件下载--Struts2的中文文件下载显示为空格问题的相关文章

Struts2 .apk 文件下载及解决中文文件名乱码问题(转)

1.Tomcat服务器不能下载 .apk类型文件 Android的APK安装包不能下载或下载文件是以 .zip为后缀名而不是 .apk为文件后缀名时,需在 Tomcat 的 web.xml 配置文件中加入以下 MIME 类型: 1 <mime-mapping> 2 <extension>apk</extension> 3 <mime-type>application/vnd.android.package-archive</mime-type>

iText 中文无法显示

/** * 导出PDF工具com.lowagie.itext测试 * * @param response * @throws IOException * @throws DocumentException */ @RequestMapping(value = "/emp/download/pdf", method = RequestMethod.GET) public void downloadPdf(HttpServletResponse response) throws IOExc

struts2官方 中文教程 系列十一:使用XML进行表单验证

在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入.在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入.使用单独的XML验证文件让您可以内置到Struts 2框架的验证器. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列十一:使用XML进行表单验证  即 http://www.cnblogs.com/linghaoxinpian/p/6938720.html 下载本章节代码 为了使用户能够编辑存储在Person对

struts2官方 中文教程 系列九:Debugging Struts

介绍 在Struts 2 web应用程序的开发过程中,您可能希望查看由Struts 2框架管理的信息.本教程将介绍两种工具,您可以使用它们来查看.一个工具是Struts 2的配置插件,另一个是调试拦截器.本文还讨论了如何设置日志级别以查看更多或更少的日志消息. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列九:Debugging Struts 即 http://www.cnblogs.com/linghaoxinpian/p/6916619.html 下载本章节代码 Configu

struts2官方 中文教程 系列七:消息资源文件

介绍 在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定).消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字段标签,并根据用户的语言环境将文本更改为特定的语言. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列七:消息资源文件  即 http://www.cnblogs.com/linghaoxinpian/p/6906720.html 下载本章节代码 信息资源属性文件 在Struts2 we

struts2官方 中文教程 系列十二:控制标签

介绍 struts2有一些控制语句的标签,本教程中我们将讨论如何使用 if 和iterator 标签.更多的控制标签可以参见 tags reference. 到此我们新建一个struts2 web 项目:struts_basic2 本帖地址:struts2官方 中文教程 系列十二:控制标签 即 http://www.cnblogs.com/linghaoxinpian/p/6941683.html 下载本章节代码 struts2 if标签 我们在thankyou.jsp中添加如下代码: <s:i

struts2官方 中文教程 系列八:异常处理

在本教程中,我们将探讨如何启用Struts 2框架处理web应用程序生成的任何未捕获的异常.Struts 2提供了健壮的异常处理,包括能够自动记录任何未捕获的异常,并将用户重定向到错误web页面. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列八:异常处理  即 http://www.cnblogs.com/linghaoxinpian/p/6915066.html 下载本章节代码 全局异常处理(Global Exception Handling) 使用Struts 2框架,您可以

解决Ubuntu系统中文乱码显示问题,终端打开文件及查看目录

解决Ubuntu系统中文乱码显示问题 [日期:2014-02-20] 来源:Linux社区  作者:njchenyi [字体:大 中 小] 我是先安装了Ubuntu 12.04 Server,然后安装桌面.进入以后发现中文有问题. 解决方法:一. Ubuntu默认的中文字符编码Ubuntu默认的中文字符编码为zh_CN.UTF-8,这个可以在/etc/environment中看到:sudo gedit /etc/environment可以看到如下内容:PATH="/usr/local/sbin:

struts2官方 中文教程 系列十:Form标签

介绍 在本教程中,我们将探索其他Struts 2表单控件.在前面的教程中,我们介绍了如何使用Struts 2表单(处理表单.表单验证和消息资源文件),我们介绍了如何使用Struts 2 head, form, textfield 控件和key属性.本教程将探索使用Struts 2 select, radio, checkbox, and checkboxlist form 控件 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列九:Debugging Struts 即 http://w