2012-09-22 15 views
5

Este código es un código RestEasy para el manejo de carga:MultipartForm manejando con la primavera

@Path("/fileupload") 
public class UploadService { 
    @POST 
    @Path("/upload") 
    @Consumes("multipart/form-data") 
    public Response create(@MultipartForm FileUploadForm form) 
    { 
     // Handle form 
    } 
} 

¿Hay algo similar usando primavera que puede manejar MultipartForm como este?

Respuesta

2

Spring incluye tiene una multipartresolver que se basa en commons-fileupload, por lo que para usarlo debe incluirlo en su compilación.

En su applicationContext.xml

<bean id="multipartResolver" 
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    <!-- one of the properties available; the maximum file size in bytes --> 
    <property name="maxUploadSize" value="<max file size>"/> 
</bean> 

En su controlador, utilice org.springframework.web.multipart.MultipartFile.

@RequestMapping(method=RequestMethod.POST, value="/multipartexample") 
public String examplePost(@RequestParam("fileUpload") MultipartFile file){ 
    // Handle form upload and return a view 
    // ... 
} 
+0

¿El MutipartFile tiene el atributo 'ruta' y 'id' automáticamente analizado desde la solicitud? – xybrek

+0

Si se refiere a la ruta del archivo en la computadora de los clientes y al atributo "id" de la etiqueta de entrada, entonces no. Esos no se envían al servidor en absoluto, nunca. – pap

+0

Ok ... Voy a probar esto y espero que funcione con App Engine. – xybrek

0

He aquí un ejemplo que muestra cómo se puede utilizar MVC Anotaciones para lograr algo similar en primavera:

@RequestMapping(method=RequestMethod.POST, value="/multipartexample") 
public String examplePost(@ModelAttribute("fileUpload") FileUpload fileUpload){ 
    // Handle form upload and return a view 
    // ... 
} 

@InitBinder 
public void initBinder(ServletRequestDataBinder binder) { 
    binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor()); 
} 

public class FileUpload implements Serializable { 
    private MultipartFile myFile; 

    public MultipartFile getMyFile() { 
     return myFile; 
    } 

    public void setMyFile(MultipartFile myFile) { 
     this.myFile = myFile; 
    } 
} 

Usted debe ser capaz de escribir en este punto final del formulario HTML, asumiendo el nombre del elemento de archivo es 'myFile'. Su forma puede ser similar al siguiente:

<form:form commandName="fileUpload" id="fileUploadForm" enctype="multipart/form-data"> 
    <form:input type="file" path="myFile" id="myFile"/> 
</form:form> 

El código @InitBinder es importante porque da instrucciones a la primavera para convertir los archivos a una matriz de bytes, que luego se puede convertir en el MultipartFile

Cuestiones relacionadas