Struts1 FormFile上傳中文文件,文件名出現亂碼(struts.jar)

HTML頁面:
<body>
<form method="post" action="Action?param=up" enctype="multipart/form-data">
   <input type="text" name="text">
   <input type="file" name="file">
   <input type="submit" name="submit" value="提交">
</form>
</body>
apache

Struts1的UploadForm表單對象定義一個變量:  
protected FormFile file;

Action的轉換處理:
UploadForm form = (UploadForm) form;

那麼經過form可獲取表單的相關信息
String fileName = file.getFileName();
post

此時若是附件爲中文文件名,那麼fileName此時就會是亂碼編碼

那麼問題就應該在Struts1的FormFile組建對編碼的處理上了spa

跟蹤源碼發現,在包org.apache.struts.upload下,有一個類CommonsMultipartRequestHandler,它主要負責文件上傳處理,
它使用的是DiskFileUpload來上傳文件, DiskFileUpload upload = new DiskFileUpload();它的默認編碼爲ISO-8859-1,
orm

所以對中文處理有亂碼,能夠在此修改它的編碼:upload.setHeaderEncoding("utf8");
      
便可解決。
對象

具體在以下代碼處:
..............
public void handleRequest(HttpServletRequest request)
    throws ServletException
{
    ModuleConfig ac = (ModuleConfig)request.getAttribute("org.apache.struts.action.MODULE");
ip

    DiskFileUpload upload = new DiskFileUpload();
   
    upload.setHeaderEncoding(request.getCharacterEncoding());
   //upload.setHeaderEncoding("utf-8");
.........................
utf-8

切記:這時struts1的bug,以後版本好像作過修復。
相關文章
相關標籤/搜索