Un formulario multiparte, es decir cuando establecemos enctype="multipart/form-data", divide el formulario por campos cada uno con su propio tipo, en Spring MVC es bastante sencillo que nuestro controlador procese solicitudes multiparte, y poder subir archivos al servidor.
En primer lugar debemos configurar el solucionador multiparte (MultipartResolver), ya que el DispatcherServlet delega esta tarea en esta interfaz y para ello tenemos dos opciones:
- StandardServletMultipartResolver
- CommonsMultipartResolver
En proyectos con versiones anteriores a Spring 3.1 o si estas utilizando un contenedor de servlets que no soporta la versión 3.0 deberías utilizar CommonsMultipartResolver, y aunque ya ha llovido desde todo esto hay muchos proyectos utilizando estas versiones antiguas, yo voy a utilizar el solucionador Standard.
Para ello simplemente necesitamos declarar un bean en nuestra clase WebConfig que extiende de WebMvcConfigureAdapter:
@Bean
public MultipartResolver multipartResolver() throws IOException {
return new StandardServletMultipartResolver();
}
Voy a utilizar el directorio temporal del sistema operativo System.getProperty("java.io.tmpdir") voy a especificar un tamaño máximo de archivo de 2 Megas, el tamaño máximo del formulario en 8 y establecer el valor fileSizeThreshold en 0 para que se guarden en disco directamente.
(https://docs.oracle.com/javaee/7/tutorial/servlets011.htm)
@Override
protected void customizeRegistration(Dynamic registration) {
String location = System.getProperty("java.io.tmpdir");
MultipartConfigElement configElement =
new MultipartConfigElement(location,2*1024*1024,8*1024*1024,0);
registration.setMultipartConfig(configElement);
}
Con los dos pasos anteriores ya hemos terminado la configuración, ahora queda ver nuestro jsp y el controlador.
El formulario no hace falta explicarlo pero aquí lo dejo:
<form method="POST" action="uploadFile" enctype="multipart/form-data">
File to upload: <input type="file" name="file"><br />
<input type="submit" value="Upload"> Press here to upload the file!
</form>
Y el controlador tampoco tiene ningún misterio, tal vez que he utilizado el directorio webapps de tomcat para subir los ficheros, ya que si lo hiciera en el WEB-INF al subir una nueva versión de la aplicación podríamos borraríamos lo existente.
@Controller
public class HomeController {
private static String filePath = System.getProperty("catalina.home") + File.separator + "webapps"+File.separator+"images"+File.separator;
@RequestMapping(value = "/")
public String home(Model model) {
return "home";
}
@RequestMapping(value = "uploadFile", method = RequestMethod.POST)
public String uploadFile(@RequestParam("file")MultipartFile image) {
if(!image.isEmpty()) {
try {
image.transferTo(new File(filePath+image.getOriginalFilename()));
} catch(Exception e) {
}
}
return "home";
}
}
Con cada tutorial de Spring MVC vamos incrementando la configuración, como podéis ver en el código fuente en Github, en la entrega siguiente ya nos vamos a lanzar a por las bases de datos, en este caso con JDBC, y posteriormente Hibernate.
No hay comentarios:
Publicar un comentario