Struts1 FormFile上传中文文件,文件名出现乱码(struts.jar)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

HTML页面:


  
  
  

Struts1的UploadForm表单对象定义一个变量:  
protected FormFile file;

Action的转换处理:
UploadForm form = (UploadForm) form;

那么通过form可获取表单的相关信息
String fileName = file.getFileName();

此时如果附件为中文文件名,那么fileName此时就会是乱码

那么问题就应该在Struts1的FormFile组建对编码的处理上了

跟踪源码发现,在包org.apache.struts.upload下,有一个类CommonsMultipartRequestHandler,它主要负责文件上传处理,
它使用的是DiskFileUpload来上传文件, DiskFileUpload upload = new DiskFileUpload();它的默认编码为ISO-8859-1,

因此对中文处理有乱码,可以在此修改它的编码:upload.setHeaderEncoding("utf8");
      
即可解决。

具体在如下代码处:
..............
public void handleRequest(HttpServletRequest request)
    throws ServletException
{
    ModuleConfig ac = (ModuleConfig)request.getAttribute("org.apache.struts.action.MODULE");

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

切记:这时struts1的bug,之后版本好像做过修复。

转载于:https://my.oschina.net/thinkinginc/blog/78354

你可能感兴趣的:(Struts1 FormFile上传中文文件,文件名出现乱码(struts.jar))