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,以后版本好像作过修复。
相关文章
相关标签/搜索