下载文档--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”的格式发给client。

String downFileName = fileName1;

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

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

如有好的建议,可留言或发至笔者邮箱:fzb_xxzy@163.com

版权声明:本文博客原创文章,博客,未经同意,不得转载。

下载文档--Struts2中国的文件下载被显示为空间的问题的更多相关文章

  1. 通过ifrmae异步下载文档

    //通过ifrmae异步下载文档 function iframeGetFile(opts) { var defaultOpts = { filePath: '', onload: function ( ...

  2. windows server 2008 r2 下发布网站excel有时候无法下载文档

    最近将公司网站服务器更新了系统,从win2003 到 win2008 r2 (64bit),一切正常,但是使用网站的过程中发现了一个比较奇怪的问题,就是,有时候网站的excel文档无法下载,但是我什么 ...

  3. book118免费下载文档方法【转】

    需要用的工具: 1.360浏览器 2.点"全屏预览",然后把鼠标放在"下载该文档",右键"审查元素",找到 途中箭头指向的标签(如图) 3. ...

  4. Book118免费下载文档方法

    在book118上下载文件时,对于小文件可以使用冰点文库下载器来下载,而对于大文件,则可以使用下面的方法: 需要用的工具: 1.360浏览器 2.点“全屏预览”,然后把鼠标放在“下载该文档”,右键“审 ...

  5. SAP下载文档为乱码

    通过事物WE60下载的文档为乱码,主要原因是编码格式的不匹配,通常默认的编码格式为ANSI编码,那么我们需要将源码的编码格式转换成UTF-8,这样问题可以解决了.   附:编码格式介绍 不同的国家和地 ...

  6. Bootstrap提供的CDN服务标签与下载文档

    目录 1.引入Bootstrap提供的CDN服务 1.选择下载Bootstrap CDN 二:下载Bootstrap官方文档 1.进入Bootstrap官网,选择3版本中文档. 1.引入Bootstr ...

  7. MVC 点击下载文档

    动态生成的List,view页面: <a href=\"#\" class=\"onlyedu-btn\" id=\"downloadError ...

  8. 下载文档时Safari浏览器下载后出现".html"问题

    下载代码是需要设置 Response.ContentType = "application/octet-stream", 不要设为application/x-msdownload, ...

  9. MVC下载文档

    public FileStreamResult DownFile(string content,string name) { ProInterface.ISubject ems = new ProSe ...

随机推荐

  1. 【SICP感应】1 工艺和替代模式

    <计算机程序的构造和解释>这本书的目的不是要解释的编程语言的语法,它是一种. 不是在你的语句知识,但是,你要教的东西做什么. 这是一个过程,一个精神. 就是所谓的程序规则的模式. 书中用了 ...

  2. Java中动态代理技术生成的类与原始类的区别

    用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后 ...

  3. Nginx——事件驱动机制(雷霆追风问题,负载均衡)

    事件处理框架 所有的worker进程都在ngx_worker_process_cycle方法中循环处理事件,处理分发事件则在ngx_worker_process_cycle方法中调用ngx_proce ...

  4. 最佳新秀SSH十六Struts2它是如何工作的内部

    前面说完了Spring.Hibernate,非常自然今天轮到struts了.struts的核心原理就是通过拦截器来处理client的请求,经过拦截器一系列的处理后,再交给Action.以下先看看str ...

  5. DOM操作应用

    创建元素 document.createElement("li"); 添加节点 oUl.appendChild(oLi); 在某个元素之前插入一个节点 oUl.insertBefo ...

  6. cookie在vs又一次run的时候丢失

    今天写个关于http cookie的demo,发现仅仅要vs又一次执行后cookie的值就会丢失,代码例如以下 protected void Page_Load(object sender, Even ...

  7. 技术七Gitservergitolite要构建和操作方便

    最近,人懒,为了让自己的变化,所以,我决定花时间学习一些新的技术,.对于这些新技术,现在的需求不是很高.只需要在它的入口. 由于本人仅仅是花三四天整出来的东西,所以不洗勿喷,另外难免会有错误,如有还请 ...

  8. JDBC连接数据库 prepareStatement

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  9. Jafka来源分析——Processor

    Jafka Acceptor接受client而建立后的连接请求,Acceptor会将Socket连接交给Processor进行处理.Processor通过下面的处理步骤进行client请求的处理: 1 ...

  10. C random C ++rand函数应用

    random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过.但在C语言中int random(num)能够这样使用,它返回的是0至num-1的一个随机数. 可改用C++下的rand函数 ...