struts2中文件下载以及中文乱码

原创 2016年05月30日 17:36:49

       昨天在试着做一个使用struts2文件下载的功能,基本上没有考虑到乱码的问题,因为当时文件都是以数字进行命名的,下载过程中没有出现问题。

下面给出代码,

Action类,

public class DocDownloadAction extends ActionSupport{
         private String downPath;//下载文件的文件位置
         public InputStream getInputStream(){
        	 //返回InputStream流方法
        	 return ServletActionContext.getServletContext().getResourceAsStream(downPath);
         }
		public String getDownPath() {
			return downPath;
		}
		public void setDownPath(String downPath) {
			this.downPath = downPath;
		}
		//文件名转换编码,防止中文乱码
         public String getDownloadFileName(){
        	 String downFileName = downPath.substring(7);
        	 try {
				downFileName = new String(downFileName.getBytes(),"UTF-8");
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        	 return downFileName;
         }
         @Override
        public String execute() throws Exception {
             
        	 return SUCCESS;
        }
}
配置,

 <action name="downLoad" class="com.mxl.action.DocDownloadAction">
    <result type="stream"><!-- 指定结果类型为stream类型 -->
       <param name="contentType">           <!-- 指定下载文件的文件类型 -->
       application/msword,text/plain,application/vnd.ms-powerpoint,application/vnd.ms-excel
       </param>
       <param name="inputName">inputStream</param><!-- 指定下载文件的入口输入流 -->
       <param name="contentDisposition">
        attachment;filename="${downloadFileName}"<!-- 指定下载文件的处理方式与文件保存名 -->
       </param>
       <param name="bufferSize">40960</param><!-- 指定下载文件的缓冲区大小 -->
    </result>
   </action>
界面:

 <font style="font-size:12px; color:red">上传者<s:property value="name"/></font>
    <table cellpadding="0" cellspacing="0">
      <tr>
      <th>文件名称</th>
      <th>上传时间</th>
      </tr>
      <s:iterator value="uploadFileName" status="st" var="doc">
      <tr>
       <td><a href="downLoad.action?downPath=upload/<s:property value="#doc"/>"><s:property value="#doc"/></a></td>
       <td><s:date name="createTime" format="yyyy-MM-dd HH:mm:ss"/></td>
      </tr>
      </s:iterator>
    </table>

当时测试的时候因为文件命名没有用到中文,就没有出错,

后来在练习下载权限控制的时候我发现了这个问题,刚开始代码是这样,

  public InputStream getInputStream(){
        	 //返回InputStream流方法
        	 return ServletActionContext.getServletContext().getResourceAsStream(Path);
         }
当文件命名为中文时,文件不能下载,这里边返回值为空,经过测试后发现downPath中的文件名是乱码的,在网上搜了一下好多方法,都试了试,最后在return前边加了一句,

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

解决了我的问题,但是修改后,文件是能够下载了,但是在浏览器中显示的文件名是乱码的,分析以后发现是这里边出的问题,未修改之前的代码,

  public String getDownloadFileName(){
        	 String downFileName = downPath.substring(7);
        	 try {
				downFileName = new String(downFileName.getBytes(),"UTF-8");
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        	 return downFileName;
         }
我试着将上边的那行代码里边的编码方式交换,

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

解决了我的问题,

希望能帮到遇到同样问题的伙伴。





版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

struts2 文件下载中文乱码问题解决方案

问题描述:1.前台jsp页面通过?传递中文参数,action中接收出现乱码 2.下载文件时,中文文件无法显示。 解决方案:1.在网上查了资料通过在jsp页面上urlencode可以解决,但是我改为传...

JSP、Struts2下载中文文件名乱码问题

方案一: 原来处理下载的代码如下: response.setHeader("Content-Disposition", "attachment; filename=" + java.net.UR...

struts 2 实现文件下载 中文乱码问题

struts2 实现文件下载中文乱码问题
  • qiotn
  • qiotn
  • 2015年07月30日 14:09
  • 1252

Struts2文件下载遇到中文乱码、中文丢失的解决方法

Struts2文件下载遇到中文乱码、中文丢失的解决方法

Java 文件下载原理 + Struts2文件下载原理 详解:~~Myself

###struts2 完成文件下载: 1.首先明确基础知识:InputStream与FileInputStream等都是对内存而言, 那么文件输入流一定是向内存输入流,这对文件下载是有用的。 本...

Struts2 文件下载(Stream)

application/octet-stream

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Struts2实现下载文件

Struts2框架和文件下载有关的类是org.apache.struts2.dispatcher.StreamResult,这个类的一些成员变量和下载有关,看源码 //下载文件的类型 pro...

struts2文件下载实例

jsp Insert title here 20161012_094556771_7237.doc 20161012_093223812_7769.jpg action p...

使用struts2实现下载功能遇到的文件中文问题解决经验分享

今天在做一个项目,使用了struts2实现了一个下载的功能。 当在页面点击下载之后,就报错了。 一开始我就怀疑是不是文件名中文的问题,于是乎,我把文件名改成了英文的。 Bingo!果然可以正常下...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts2中文件下载以及中文乱码
举报原因:
原因补充:

(最多只允许输入30个字)