小弟最近在学习struts2文件下载 遇到个问题!
从前台传递一个文件名称:filename
路径我写死在程序中了!
public String getFilename() {

return filename;
}public void setFilename(String filename) {

try {
String rString = new String(filename.getBytes("iso-8859-1"),"UTF-8");
this.filename=rString;
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
public InputStream getTargetFile()throws Exception {
try {
return ServletActionContext.getServletContext()
.getResourceAsStream("\\download" + "\\" + filename);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
}struts.xml--------------------------------<action name="download" class="com.hp.dl.action.DownloadFile">
     <result name="tt" type="stream">
        <param name="contentType">application/zip;charset=ISO8859-1</param>
        <!-- inputName默认值是inputStream,如果action中用于读取下载文件内容的属性名是inputStream,那么可以省略这个参数 -->
        <param name="inputName">targetFile</param>
        <!--动态获取文件名,从Action中的取得filename-->
        <param name="bufferSize">2048</param>
        <param name="contentDisposition">attachment;filename=${filename}</param>
     </result>
   </action>

解决方案 »

  1.   

    之前做过Struts2上传下载的,遇到中文乱码一直没有解决你这个是用迅雷下载的吗,之前我的用迅雷下载后缀是为Action ,但是浏览器下载就正常
      

  2.   

    tomcat server。xml中 加上  URLDecode=‘utf-8’ 是URLDecode还是URLEncode 楼主都试下 我有点忘了 不过可以google
      

  3.   

    被乱码问题困扰过,大致知道3种情况,字节读取个数不同造成乱码,IDE的设置编码造成乱码,代码中的编码设置造成乱码,希望能帮到LZ
      

  4.   


    <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
    不行啊
      

  5.   


    workspace中设定的是UTF-8
    到底是哪出问题了
      

  6.   

    <action name="download" class="com.hp.dl.action.DownloadFile">
         <result name="tt" type="stream">
            <param name="contentType">application/zip;charset=ISO8859-1</param>
            <!-- inputName默认值是inputStream,如果action中用于读取下载文件内容的属性名是inputStream,那么可以省略这个参数 -->
            <param name="inputName">targetFile</param>
            <!--动态获取文件名,从Action中的取得filename-->
            <param name="bufferSize">2048</param>
            <param name="contentDisposition">attachment;filename=${filename}</param>
         </result>
       </action>
    你这样写是没错
    错的是Struts2对流的处理本身就有bug,
    文件下载没有必要非得用Struts2不可,
    只要有response就足够解决问题了,
      

  7.   

     <param name="contentType">application/zip;charset=ISO8859-1</param>