So I'm a newbie to Spring and I'm trying to get file upload working for my project (I'm using Spring Tool Suite btw.) and when submitting a form all I'm getting is:
HTTP Status 500 - Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided
Stack trace from browser:
type Exception report 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 description The server encountered an internal error that prevented it from fulfilling this request. exception 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 org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:100) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.(StandardMultipartHttpServletRequest.java:78) org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:75) org.springframework.web.multipart.support.MultipartFilter.doFilterInternal(MultipartFilter.java:108) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106) root cause java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided org.apache.catalina.connector.Request.parseParts(Request.java:2676) org.apache.catalina.connector.Request.getParts(Request.java:2643) org.apache.catalina.connector.RequestFacade.getParts(RequestFacade.java:1083) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:85) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.(StandardMultipartHttpServletRequest.java:78) org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:75) org.springframework.web.multipart.support.MultipartFilter.doFilterInternal(MultipartFilter.java:108) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106) note The full stack trace of the root cause is available in the Apache Tomcat/8.0.27 logs.
This is the form tag in jsp:
<form:form class="form-horizontal" role="form" method="post" action="newArtist.html" modelAttribute="artist" enctype="multipart/form-data"> Input part:
<div class="form-group"> <div class="col-lg-3"> <label for="photo">Artist photo:</label> <form:input type="file" id="photo" path="photo"></form:input> </div> </div> Photo is stored in this field in Artist object:
@Lob private byte[] photo; Controller mapping methods:
@RequestMapping(value = "/newArtist", method = RequestMethod.GET) public String showAddArtistForm(Model model) { model.addAttribute("artist", new Artist()); return "newArtist"; } @RequestMapping(value = "/newArtist", method = RequestMethod.POST) public String addArtist(@ModelAttribute("artist") @Valid Artist artist, BindingResult result, @RequestParam("photo") MultipartFile photo) throws IOException { if (result.hasErrors()) return "newArtist"; if(photo.getBytes() != null) artist.setPhoto(photo.getBytes()); artistService.addArtist(artist); return "redirect:artists.html"; } Multipart resolver configuration in servlet-context.xml:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10000000"/> </bean> Filters in web.xml:
<filter> <filter-name>MultipartFilter</filter-name> <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class> </filter> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>MultipartFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> Dependencies:
<!-- Apache Commons FileUpload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <!-- Apache Commons IO --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> I also imported Tomcat's config file context.xml to META-INF/context.xml and edited Context tag like so:
<Context allowCasualMultipartParsing="true"> Nothing seems to be working, any help will be greatly appreciated.