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