SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题

1.文件上传关键代码:
DiskFileItemFactory fac = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(fac);
upload.setHeaderEncoding("utf-8");
@SuppressWarnings("rawtypes")
List fileList = null;
try {
fileList = upload.parseRequest(request);
} catch (FileUploadException ex) {
ex.printStackTrace() ;
}

这里的request对象是初始时HttpServletRequest的对象。刚开始认为fileList对象不会为空,但是却空。主要原因在于我配置的spring MVC的文件解析器如下:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760" />
</bean>
关键之处在于CommonsMultipartResolver中的方法parseRequest已经解析过request对象了。方法如下:

SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题_第1张图片

2.问题解决:
(1).可以把上面的spring MVC文件解析器注释掉,解析就不为空了。个人建议不要这样做,因为注释之后图片就不能上传了。
(2).配置自定义的文件解析器就可以了。我是这样配置的如下:
<bean id="multipartResolver" class="sh.xz.dbutil.MyMultipartResolver">
<property name="excludeUrls">
<list>
<value>/company/add</value>
</list>
</property>
<property name="maxUploadSize" value="10485760" />
</bean>

value路径是需要文件的controler路径。

public class MyMultipartResolver extends CommonsMultipartResolver{
private List<String> excludeUrls;
  
    public void setExcludeUrls(List<String> excludeUrls) {
        this.excludeUrls = excludeUrls;
    }
   
    public List<String> getExcludeUrls() {
        return excludeUrls;
    }


    @Override
    public boolean isMultipart(HttpServletRequest request) {   
        for (String url: excludeUrls) {  
            if (request.getRequestURI().contains(url)) {          
            return super.isMultipart(request);             
            }
        }
        return false;    
    }
}

这样既可以上传的文件可以得到你想要的值,也可以上传图片。

你可能感兴趣的:(fileupload)