1. 程式人生 > >struts2 檔案下載中文亂碼問題解決方案

struts2 檔案下載中文亂碼問題解決方案

問題描述:1.前臺jsp頁面通過?傳遞中文引數,action中接收出現亂碼 2.下載檔案時,中文檔案無法顯示。

解決方案: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);
          }