zoukankan      html  css  js  c++  java
  • 下载文档--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”的格式发给client。

    String downFileName = fileName1;

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

     

     

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


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

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

  • 相关阅读:
    MYSQL最大连接数设置
    判断闰年
    Hanoi塔问题(递归)
    字符串替换(find函数和replace函数)
    全排列问题(next_permutation函数)
    南阳理工 oj 题目739 笨蛋难题四
    (c++实现)南阳理工 题目325 zb的生日
    (c++实现)南洋理工 oj 267 郁闷的C小加(二)
    (c++实现)南阳理工acm 题目117 求逆序数
    (c++实现) 南洋理工acm 题目2 括号配对问题
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4624071.html
Copyright © 2011-2022 走看看