日期:2014-05-19  浏览次数:20688 次

struts2 文件下载:含有中文名称的文件后缀为action!求大神赐教
Java code

小弟最近在学习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>



------解决方案--------------------
被乱码问题困扰过,大致知道3种情况,字节读取个数不同造成乱码,IDE的设置编码造成乱码,代码中的编码设置造成乱码,希望能帮到LZ
------解决方案--------------------
Java code
<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>