2015-10-14 3 views
1

J'ai récemment démarré Spring Boot dans mon application. Il existe un utilitaire de téléchargement de fichiers qui fonctionnait correctement lorsque vous utilisiez Tomcat8, mais après le basculement vers Spring Boot, il ne fonctionnait pas.Spring Boot + Téléchargement de fichier ne fonctionne pas

Ci-dessous le code.

JSP

<form id="fileupload" action="/myApp/upload" method="POST" enctype="multipart/form-data"> 
<table id="files" style="border-spacing:0px 5px;margin-top:5px;"> 
    <tbody><tr> 
     <td><input type="file" class="btn btn-info" name="files" id="files0"></td> 
    </tr></tbody> 
</table> 
</form> 

Contrôleur

@RequestMapping(method = RequestMethod.POST, consumes = "multipart/form-data") 
    public String upload(@RequestParam("files") MultipartFile files, @RequestHeader HttpHeaders httpHeaders, Model model, Locale locale) { 
     LOGGER.debug("Entering upload"); 
    } 

Spring Boot Config:

@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class, MultipartAutoConfiguration.class }) 
@Configuration 
@ComponentScan 
@ImportResource(value = "classpath:/context.xml") 
public class MyApplication { 

public MyApplication() { 
    super(); 
} 

public static void main(String[] args) { 
    SpringApplication.run(MyApplication.class, args); 
} 
} 

mon Mvc.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:mvc="http://www.springframework.org/schema/mvc"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

<bean id="messageSource"  class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basename" value="classpath:messages/messages"/> 
</bean> 

<context:component-scan base-package="com.my"> 
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
</context:component-scan> 

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"> 
    <mvc:message-converters register-defaults="true" > 
     <ref bean="jsonHttpMessageConverter"/> 
    </mvc:message-converters> 
</mvc:annotation-driven> 

<mvc:resources location="/css/**" mapping="/css/" /> 
<mvc:resources location="/js/**" mapping="/js/" /> 
<mvc:resources location="/img/**" mapping="/img/" /> 
<mvc:resources location="/fonts/**" mapping="/fonts/" /> 

<mvc:default-servlet-handler/> 

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
    <property name="exceptionMappings"> 
     <props> 
      <prop key="java.lang.Exception">error</prop> 
     </props> 
    </property> 
</bean> 

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/views/" /> 
    <property name="suffix" value=".jsp" /> 
    <property name="order" value="0"></property> 
</bean> 

<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> 
    <property name="favorPathExtension" value="false" /> 
</bean> 
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    <property name="maxUploadSize" value="-1" />  
</bean> 

<bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
    <property name="prefixJson" value="false" /> 
    <property name="supportedMediaTypes" value="application/json" /> 
    <property name="objectMapper" ref="objectMapper"/> 
</bean> 

Exception stacktrace:

org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'files' is not present 
at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:251) 
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:94) 
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77) 
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162) 
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129) 
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705) 
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967) 
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
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:107) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1526) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1482) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Thread.java:744) 

J'ai essayé @SpringBootApplication sur ma classe d'application de démarrage, mais que cela n'a pas aidé. J'utilise Tomcat embarqué.

J'ai recherché différents blogs et SO questions mais n'a pas été capable de le résoudre. S'il vous plaît aider.

+0

Etes-vous en train d'exécuter un Tomcat intégré ou en cours de déploiement? –

Répondre

-3

L'amorçage et le chargement du fichier fonctionnent correctement. La documentation est disponible here. Avec la configuration par défaut, le téléchargement de fichiers en plusieurs parties fonctionne dès la sortie de la boîte. À partir du code que vous avez posté, je ne pense pas que vous avez configuré Spring Boot correctement. Démarrer here. Par exemple, je vois que vous n'avez pas l'annotation @SpringBootApplication dans MyApplication qui déclenche Spring Boot pour implémenter la configuration standard.

+0

Il a '@ EnableAutoConfiguration',' @ ComponentScan' et '@ Configuration' pour lesquels' @ SpringBootApplication' n'est rien de plus qu'une version plus courte. –

+0

À droite ... ce qui m'amène à me demander s'il a configuré Spring Boot correctement. C'est une stratégie commune de résolution de problèmes pour commencer avec la bonne configuration connue - seulement '@ SpringBootApplication' - confirmant la fonctionnalité, puis en ajoutant des variables. – sh0rug0ru

+0

L'ajout de '@ SpringBootApplication' ne change rien, ce n'est qu'un raccourci pour les 3 annotations. Cela ne changera rien. –