关闭

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

2021人阅读 评论(1) 收藏 举报
分类:

       昨天在试着做一个使用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");

解决了我的问题,

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





2
0
查看评论

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

struts2 实现文件下载中文乱码问题
  • qiotn
  • qiotn
  • 2015-07-30 14:09
  • 1347

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

方案一: 原来处理下载的代码如下: response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, &quo...
  • csh624366188
  • csh624366188
  • 2011-08-17 17:47
  • 31301

Struts2实现下载文件

Struts2框架和文件下载有关的类是org.apache.struts2.dispatcher.StreamResult,这个类的一些成员变量和下载有关,看源码 //下载文件的类型 protected String contentType = "text/plain"...
  • wnl_csdn
  • wnl_csdn
  • 2016-08-12 16:44
  • 3723

struts2文件下载实例

jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> Insert title he...
  • yuhui123999
  • yuhui123999
  • 2016-10-12 11:11
  • 807

struts2文件上传/下载(附源代码)

struts2对于文件的操作提供很多便捷的地方,因此在项目中多少会涉及到它的使用,当然网上关于它的帖子也确实不少,清楚地,不清楚的,详细的,不详细的,都有很多,我也曾学到过很多热爱分享的同行们的帮助,在这里,我便按我自己思路,整理了下,写成这篇博文,并提供效果图和附件的下载。 首先,按老规矩,上效...
  • johnjobs
  • johnjobs
  • 2012-10-16 14:25
  • 6930

struts2文件上传下载源代码

  • 2012-10-16 14:39
  • 3.86MB
  • 下载

struts2实现文件下载实例源代码

  • 2015-02-06 00:14
  • 4.18MB
  • 下载

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

Struts2文件下载遇到中文乱码、中文丢失的解决方法
  • qq_36411874
  • qq_36411874
  • 2017-03-12 19:37
  • 420

struts2解决文件上传下载中文乱码问题

解决上传中文乱码问题 异常信息: "Can not find a Java.io.InputStream with the name [downLoadFile] in the invocation stack. Check the tag specified for this acti...
  • kevin_love_it
  • kevin_love_it
  • 2017-03-16 17:51
  • 378

Struts 2 type="stream" 中文filename如何正常显示

uploadFileName = java.net.URLDecoder.decode(uploadFileName,"ISO8859-1"); inputStream ${uploadContentType} attachment;f...
  • wyxz126
  • wyxz126
  • 2013-04-19 16:13
  • 885
    个人资料
    • 访问:426915次
    • 积分:8012
    • 等级:
    • 排名:第3091名
    • 原创:391篇
    • 转载:20篇
    • 译文:0篇
    • 评论:70条
    博客专栏