MultipartResolver del paquete org.springframework.web.multipart es una estrategia para analizar solicitudes de varias partes, incluidas las cargas de archivos. Hay una implementación basada en FileUpload del proyecto Commons y otra basada en el análisis de consultas multiparte. Servlet 3.0.

Para habilitar el procesamiento multiparte, debe declarar un bean MultipartResolver en la configuración DispatcherServlet de Spring con el nombre multipartResolver. DispatcherServlet lo detectará y lo aplicará a la solicitud entrante. Al recibir una POST con el tipo de contenido multipart/form-data, el solucionador analiza el contenido ajustando el HttpServletRequest actual como MultipartHttpServletRequest para proporcionar acceso a archivos reconocidos además de exponer componentes como parámetros de consulta.

FileUpload de archivos desde Apache Commons

Para usar FileUpload de Apache Commons, puede configurar un bean de tipo CommonsMultipartResolver llamado multipartResolver. También necesitas tener el archivo jar commons-fileupload como una dependencia en tu classpath.

Esta variante de resolución delega autoridad a una biblioteca local dentro de la aplicación, proporcionando máxima portabilidad multiplataforma entre contenedores de servlets. Alternativamente, puede utilizar el reconocimiento de servlet multiparte estándar a través del propio analizador del contenedor, como se describe a continuación.

Commons FileUpload tradicionalmente solo se aplica a solicitudes POST, pero acepta cualquier tipo de contenido multipart/. Para obtener detalles y opciones de configuración, consulte el javadoc en CommonsMultipartResolver.

Servlet 3.0

El análisis multiparte según la especificación Servlet 3.0 debe estar habilitado en la configuración del contenedor de servlet. Para hacer esto:

  • En Java, configure MultipartConfigElement para registrar servlets.

  • En web.xml, agregue una sección "<multipart-config>" a la declaración del servlet.

El siguiente ejemplo muestra cómo configurar MultipartConfigElement para registrar servlets:

Java

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    // ...
    @Override
    protected void customizeRegistration(ServletRegistration.Dynamic registration) {
        // Opcionalmente también establece maxFileSize, maxRequestSize, fileSizeThreshold
        registration.setMultipartConfig(new MultipartConfigElement("/tmp"));
    }
}
Kotlin

class AppInitializer : AbstractAnnotationConfigDispatcherServletInitializer() {
    // ...
    override fun customizeRegistration(registration: ServletRegistration.Dynamic) {
        // Opcionalmente también establece maxFileSize, maxRequestSize, fileSizeThreshold
        registration.setMultipartConfig(MultipartConfigElement("/tmp"))
    }
}

Una vez creada la configuración de Servlet 3.0, puede agregar un bean de tipo StandardServletMultipartResolver llamado multipartResolver.

Esta opción de reconocimiento utiliza el analizador de varias partes de su contenedor de servlets tal como está, exponiendo potencialmente la aplicación a diferencias en la implementación del contenedor. De forma predeterminada, el analizador intentará analizar cualquier tipo de contenido multipart/ utilizando cualquier método HTTP, pero es posible que esto no sea compatible con todos los contenedores de servlets. Para obtener detalles y opciones de configuración, consulte el javadoc en StandardServletMultipartResolver.