2012-08-16 32 views
7
  • primavera 3.1.1.RELEASE
  • embarcadero 7.3.0.v20110203
  • Commons-fileupload 1.2.1
  • commons-io 1.4

Quiero subir dos archivos por formulario html pero siempre recibo una excepción de solicitud de varias partes. Busqué en Google pero no encontré la solución adecuada.La solicitud actual no es una petición de varias partes - Spring MVC

org.springframework.web.multipart.MultipartException: The current request is not a multipart request 
at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.assertIsMultipartRequest(RequestParamMethodArgumentResolver.java:184) 
at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.resolveName(RequestParamMethodArgumentResolver.java:149) 
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:83) 
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:75) 
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:156) 
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:117) 
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) 
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:534) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:476) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:517) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:935) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:404) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:184) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:870) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 
at org.eclipse.jetty.server.Server.handle(Server.java:346) 
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:596) 
at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1068) 
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:807) 
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:220) 
at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:426) 
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:520) 
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:528) 
at java.lang.Thread.run(Thread.java:680) 

Mi controlador:

 @RequestMapping(value = "blub", method = RequestMethod.POST) 
    public String String(@RequestParam("version") String version, @RequestParam("changeLog") String changeLog, 
      @RequestParam("status") String status, @RequestParam("y") MultipartFile y, 
      @RequestParam("x") MultipartFile x, @RequestParam("zId") String zId, RedirectAttributes attr) { 

     double size = 0.0; 
     byte[] xFile = null; 
     byte[] yFile = null; 
     String downloadUrl = "blub"; 

     if (!x.isEmpty() && !y.isEmpty()) { 
      try { 
       xFile = x.getBytes(); 
       yFile = y.getBytes(); 
       size = x.getSize()/(1024 * 1024); 
      } catch (IOException e) { 
      } 
      System.out.println("file upload received! Name:[" + version + "] Size:[" + xFile.length + "]"); 
      System.out.println("file upload received! Name:[" + version + "] Size:[" + yFile.length + "]"); 
     } else { 
      return "file upload failed!"; 
     } 

     zService.saveZ(new Z(changeLog, status, downloadUrl, size, new Date(), yFile, xFile, 
       Integer.parseInt(zId))); 
     return "redirect:Z"; 
    } 

mi página .jsp:

<form method="POST" action="/form/blub" id="Z" class="form-horizontal" enctype=”multipart/form-data”> 
         <fieldset> 
          <legend>Create Z</legend> 

          <div class="control-group"> 
           <label class="control-label" for="input">Version</label> 
           <div class="controls"> 
            <input type="text" class="input-xlarge" id="version" name="version"> 
           </div> 
          </div> 

          <div class="control-group"> 
           <label class="control-label" for="textarea">Changelog</label> 
           <div class="controls"> 
            <textarea class="input-xlarge" id="textarea" rows="4" id="changeLog" name="changeLog"></textarea> 
           </div> 
          </div> 

          <div class="control-group"> 
           <label class="control-label" for="input">Status</label> 
           <div class="controls"> 
            <input type="text" class="input-xlarge" id="status" name="status"> 
           </div> 
          </div> 


          <div class="control-group"> 
           <label class="control-label" for="select01">Select list</label> 
           <div class="controls"> 
            <select id="Z" name="Z"> 

             <c:forEach items="${z}" var="current"> 
              <option value="${z.id}"> 
               <c:out value="${z.name}" /> 
              </option> 
             </c:forEach> 

            </select> 
           </div> 
          </div> 
          <div class="control-group"> 
           <label class="control-label" for="x">File input</label> 
           <div class="controls"> 
            <input class="input-file" id="x" type="file"> 
           </div> 
          </div> 

          <div class="control-group"> 
           <label class="control-label" for="y">File input</label> 
           <div class="controls"> 
            <input class="input-file" id="y" type="file"> 
           </div> 
          </div> 

          <div class="form-actions"> 
           <button type="submit" class="btn btn-success">Create Z</button> 
           <button type="reset" class="btn">Cancel</button> 
          </div> 
         </fieldset> 
        </form> 

primavera-serverlet.xml

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

    <context:annotation-config /> 
    <!-- use this for Spring Jackson JSON support --> 
    <mvc:annotation-driven /> 
    <mvc:default-servlet-handler /> 
    <tx:annotation-driven transaction-manager="transactionManager" /> 
    <jdbc:embedded-database id="dataSource" type="H2" /> 

    <context:component-scan base-package="com.x.y.z.config" /> 

    <context:component-scan base-package="com.x.y.z.market.dao" /> 

    <context:component-scan base-package="com.x.y.z.service.app" /> 

    <context:component-scan base-package="com.x.y.z.controller" /> 

    <bean id="multipartResolver" 
     class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /> 
    <bean 
     class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 

     <property name="viewResolvers"> 

      <list> 

       <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 

        <property name="viewClass" 
         value="org.springframework.web.servlet.view.JstlView" /> 

        <property name="prefix" value="/WEB-INF/jsp/" /> 

        <property name="suffix" value=".jsp" /> 
       </bean> 
      </list> 
     </property> 
    </bean> 

</beans> 

Respuesta

7

es necesario agregar esto a su XML de Spring

<bean id="multipartResolver" 
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
</bean> 
+0

Ver arriba. Actualizo mi publicación y ya está en mi spring-servlet.xml -.- – Philippxp

+3

¿Alguien se dio cuenta de esto? Tengo el mismo problema. – INElutTabile

3

Por favor asegúrese de que está utilizando las frases correctas para el enctype -attribute del form -elemento en su JSP.

+1

Tuve este problema exacto, pero mi problema se resolvió cambiando el enctype a multipart/form-data. Estoy de acuerdo con Gil en que necesitas corregir las cotizaciones en tu jsp. – java1337

7

trate de añadir las cabeceras:

@RequestMapping(value=("/uploadpsd"),headers=("content-type=multipart/*"),method=RequestMethod.POST) 
1

1. enctype=”multipart/form-data”

2. enctype="multipart/form-data"

observar las comillas dobles que aquí hay una diferencia entre los dos ... El uso de enctype="multipart/form-data"enctype=”multipart/form-data”

Cuestiones relacionadas