您的位置:首页 > 编程语言 > Java开发

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

2013-01-05 12:38 295 查看
场景:用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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: