struts2文件下载时,下载文件和保存文件名都为中文时解决方案

来源:互联网 发布:复制手机联系人软件 编辑:程序博客网 时间:2024/05/29 20:01

场景:用struts2实现文件的下载,服务器上的文件名为中文,下载到本地保存的文件名也是中文,这时会出现乱码。解决方案如下:

package pic;

public class PicAction extends BaseAction {
//下载参数
private String downloadFilePath;
private String downloadFileName;


public String downloadFilesByBreakPoint() {
return "success";
}


public InputStream getInputStream() throws Exception {
downloadFilePath = new String(downloadFilePath.getBytes("iso-8859-1"));   //解决下载的文件为中文问题
File downloadFile = new File(Global.FIlE_ROOT+downloadFilePath);

//解决下载到本地保存的文件名为中文问题
downloadFileName = new String(downloadFilePath.substring(downloadFilePath.lastIndexOf("\\")+1).getBytes(),"iso-8859-1");
return new FileInputStream(downloadFile);
       }

public String getDownloadFilePath() {
return downloadFilePath;
}


public void setDownloadFilePath(String downloadFilePath) {
this.downloadFilePath = downloadFilePath;
}


public String getDownloadFileName() {
return downloadFileName;
}


public void setDownloadFileName(String downloadFileName) throws Exception{
this.downloadFileName = new String(downloadFileName.getBytes("ISO-8859-1"),"GBK");;
}
}


struts2的配置文件如下:

<action name="downloadFilesByBreakPoint" method="downloadFilesByBreakPoint" class="pic.PicAction">

        <result name="success" type="stream">

        <!-- 解决保存到本地的文件名为中文问题 -->
        <param name="contentType">charset=iso-8859-1</param>   
       <!-- inputName默认值是inputStream,如果action中用于读取下载文件内容的属性名是inputStream,那么可以省略这个参数 -->
       <param name="inputName">inputStream</param>
       <!--动态获取文件名,从Action中的取得filename-->
       <param name="contentDisposition">
           attachment;filename=${downloadFileName}
       </param>
       <param name="bufferSize">2048</param>
</result>
        </action>

原创粉丝点击