Springmvc上传文件,request对象转换错误

来源:互联网 发布:淘宝扣48分封多久账号 编辑:程序博客网 时间:2024/05/16 10:26

最近在做SpringMvc上传文件时,遇到MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;    转换错误。错误信息如下:

2011-9-1 9:40:37 org.apache.catalina.core.StandardWrapperValve invoke 
严重: Servlet.service() for servlet springmvc threw exception 
java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest 
at com.pdcss.bmxxfb.controller.WzXxfbPdtpController.upload(WzXxfbPdtpController.java:155) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:421)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:409)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:774) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:818) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at javacommon.filter.LoggerMDCFilter.doFilterInternal(LoggerMDCFilter.java:51) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
at java.lang.Thread.run(Thread.java:662) 



查找了一些资料,现在把网络大虾的一些解决方法做个简单的总结:

1、 bean配置文件是否添加

<bean id="multipartResolver"       class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
      <!-- set the max upload size100MB -->  
      <property name="maxUploadSize">  
           <value>104857600</value>  
      </property>  
      <property name="maxInMemorySize">  
          <value>4096</value>  
      </property>  
</bean> 

2、pom.xml文件中是否添加了依赖jar

commons-io.jar和commons-fileupload.jar

3、如果上面的方法还是没有解决问题,接下来按照这种方式可以解决这个问题

MultipartHttpServletRequest multipartRequest = null;
if(request instanceof MultipartHttpServletRequest)
{
// 转型为MultipartHttpRequest(重点的所在)
multipartRequest = (MultipartHttpServletRequest) request;
}else
{
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request
.getSession().getServletContext());
commonsMultipartResolver.setDefaultEncoding("utf-8");
multipartRequest = commonsMultipartResolver.resolveMultipart(request);
}

// 获得第1张图片(根据前台的name名称得到上传的文件)
MultipartFile file = multipartRequest.getFile("uploadFile");

即用另外一种方式来得到multipartRequest 对象。

简单的总结,希望对大家有帮助。谢谢



原创粉丝点击