struts2 檔案下載中文亂碼問題解決方案
阿新 • • 發佈:2019-02-16
問題描述:1.前臺jsp頁面通過?傳遞中文引數,action中接收出現亂碼 2.下載檔案時,中文檔案無法顯示。
action:
解決方案:1.在網上查了資料通過在jsp頁面上urlencode可以解決,但是我改為傳遞英文引數,繞開該問題
2.一開始沒有理解struts.xml中${}的含義,導致filename一直獲取不到。其實這個是struts自動載入堆疊中的值,由於我在傳遞時只傳了id,filename肯定是沒有值的。後來在setid方法中,加上了對filename的賦值,方法可能有點奇怪,但是效果達到。
3.下載檔名變成中文,網上有很多資料,通過設定charset=ISO8859-1成功解決。
程式碼:
struts.xml
<action name="downloadAction" class="com.dcj.action.downloadAction"> <result type="stream"> <param name="contentType">application/octet-stream;charset=ISO8859-1</param> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment;filename="${docFileName}"</param> <param name="bufferSize">4096</param> </result> </action>
action:
public void setId(String id) { this.id = id; Doc d =(Doc) (docServiceInter.findById(Doc.class, Integer.parseInt(id))); docFileName = d.getFilename(); } public String getDocFileName() throws UnsupportedEncodingException { ServletActionContext.getResponse().setHeader("charset","ISO8859-1"); return new String(docFileName.getBytes(), "ISO8859-1"); } public InputStream getInputStream() { return ServletActionContext.getServletContext().getResourceAsStream("/upload/"+docFileName); }