1. 程式人生 > >struts2檔案下載的中文名解決方案

struts2檔案下載的中文名解決方案

找了很多資料,最後從論壇上找到的解決方案,這裡貼一下幾處關鍵程式碼

<action name="filedownload" class="fileDownloadAction">
    <result name="success" type="stream">
        <param name="contentType">application/octet-stream;charset=ISO8859-1</param> //注意這裡的charset要寫
        <param name="contentDisposition">attachment;filename="${fileName}"</param>
        <param name="inputName">downloadFile</param>
    </result>
</action>
如果要通過url傳遞要下載的檔名,則要將要下載的中文名用URLEncoder編碼:
ServletActionContext.getRequest().setAttribute("report",URLEncoder.encode(“我是中文.txt”, "utf-8"));

得到的是字串。將此字串傳給url:

<a href="student/filedownload?fileName=${report}">
在下載檔案的action中修改這幾處
public InputStream getDownloadFile() throws Exception {
    fileName = new String(fileName.getBytes("ISO-8859-1")); //將編碼後的中文名解碼,得到fileName為“我是中文.txt”
由於struts配置檔案中<param name="contentDisposition">attachment;filename="${fileName}"</param>獲取的filename="${fileName}"是通過getFileName()方法獲取的。因此修改getFileName()方法:
public String getFileName() throws Exception {
    return new String(fileName.getBytes(), "ISO8859-1");
}
至此,下載的檔案中文名問題解決。