博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
下载文档--Struts2中国的文件下载被显示为空间的问题
阅读量:6709 次
发布时间:2019-06-25

本文共 1977 字,大约阅读时间需要 6 分钟。

下载文档--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

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

你可能感兴趣的文章
webdriver API study
查看>>
QoS令牌桶工作原理
查看>>
android工程gen目录中R.java包名是怎么确定
查看>>
【Machine Learning in Action --4】朴素贝叶斯过滤网站的恶意留言
查看>>
Java基础之类Class使用
查看>>
Ubuntu+Eclipse+ADT+Genymotion+VirtualBox开发环境搭建
查看>>
Android 学习之 开源项目PullToRefresh的使用
查看>>
Matplot中文乱码完美解决方式
查看>>
stm32学习笔记----双串口同时打开时的printf()问题
查看>>
Java代码简化神器-Lombok
查看>>
How do I create a List in Scala?
查看>>
lintcode:移动零
查看>>
tomcat的webappclassloader中一个奇怪的异常信息
查看>>
Java语言与C++语言的差异总结
查看>>
Semaphore实现Andoird版源代码剖析
查看>>
使用gSoap规避和改动ONVIF标准类型结构的解析
查看>>
架构设计之策略模式
查看>>
hdu 5400 Arithmetic Sequence(模拟)
查看>>
求职(2015南京站获得百度、美的集团、趋势科技、华为offer)
查看>>
压测 apache ab 初探
查看>>