struts2檔案下載的中文名解決方案
阿新 • • 發佈:2019-02-17
找了很多資料,最後從論壇上找到的解決方案,這裡貼一下幾處關鍵程式碼
如果要通過url傳遞要下載的檔名,則要將要下載的中文名用URLEncoder編碼:<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>
ServletActionContext.getRequest().setAttribute("report",URLEncoder.encode(“我是中文.txt”, "utf-8"));
得到的是字串。將此字串傳給url:
<a href="student/filedownload?fileName=${report}">
在下載檔案的action中修改這幾處由於struts配置檔案中<param name="contentDisposition">attachment;filename="${fileName}"</param>獲取的filename="${fileName}"是通過getFileName()方法獲取的。因此修改getFileName()方法:public InputStream getDownloadFile() throws Exception { fileName = new String(fileName.getBytes("ISO-8859-1")); //將編碼後的中文名解碼,得到fileName為“我是中文.txt”
public String getFileName() throws Exception {
return new String(fileName.getBytes(), "ISO8859-1");
}
至此,下載的檔案中文名問題解決。