背景:
SpringMVC项目需要上传文件。于是按照下面的步骤操作了。但是还是遇到了问题。
第一步,在application-context.xml添加了如下的代码
<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>
第二步,然后在Controller里面添加接收file上传的代码如下
@RequestMapping(value = "/file/upload",method = RequestMethod.POST)
@Response
public BaseResult fileUpload(@RequestPart("file") MultipartFile file , HttpServletRequest request) throws IOException {
File serverFile = UploadUtils.saveFile(file);
return new DataResult(result);
}
第三步,用POST发上传文件的请求
但是。Web服务抛错。异常如***意看异常。
multipart servlet request; nested exception is java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided
[dart-backend]15:36:31 506 ERROR (com.ximalaya.mobile.common.exception.resolver.BaseHandlerExceptionResolver:70) - resolve exception message:Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided,request:/dart-backend/file/upload,queryString:null
org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided
at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:111)
at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.<init>(StandardMultipartHttpServletRequest.java:85)
at org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:79)
at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1099)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:932)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.ximalaya.xdcs.spring.filter.XmlyXdcsTraceFilter.doFilter(XmlyXdcsTraceFilter.java:169)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.nali.common.web.CharacterFilter.doFilter(CharacterFilter.java:57)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided
at org.apache.catalina.connector.Request.parseParts(Request.java:2826)
at org.apache.catalina.connector.Request.getParts(Request.java:2793)
at org.apache.catalina.connector.RequestFacade.getParts(RequestFacade.java:1084)
at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:92)
... 38 more
解决方法:在DispatcherServlet里面添加Multipart-config 配置。写入loaction和 文件上传大小限制就能解决上面抛异常的问题了。
<servlet>
<servlet-name>Spring Web</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:web-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<multipart-config>
<!--临时文件的目录-->
<location>/tmp/upload/</location>
<!-- 上传文件最大10M -->
<max-file-size>10485760</max-file-size>
<!-- 上传文件整个请求不超过10M -->
<max-request-size>10485760</max-request-size>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>Spring Web</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
最后说明:
我之前找了很多人的解决方案。都是不正确的。写这个就是希望大家可以最快的解决问题。不走弯路。在这里我真的很想吐槽国内的程序员的质量真是太差了。写博客一个问题都描述不清楚。如果你看到我的博客问题还是不能解决。可以在评论里面留言。我看到后会给予帮助。希望国内的程序员都能好好写博客。不然最后大家和世界的差距只会越来越大。