En primer lugar, necesitamos saber qué es Spring Boot. Permítanme hablar brevemente de eso aquí. El arranque de Spring puede considerarse como un marco en un marco ---> integra varios marcos, como seguridad, JPA, datos, nubes, etc., no necesita preocuparse por la configuración y puede comenzar rápidamente el desarrollo. Si está interesado, puede comprender el principio de implementación de configuración automatizada. En esencia, es la implementación de configuración condicional de Spring 4.0. Si deja las apuestas profundamente, las verá.
El principio de la carga del archivo de arranque de primavera es en realidad Spring MVC, porque esta parte del trabajo es realizada por Spring MVC en lugar del arranque de primavera. Entonces, ¿cómo maneja SpringMVC el proceso de carga de archivo?
imagen:
Primero, el proyecto inicia la configuración relevante y luego realiza el segundo paso anterior, el desplazamiento del servicio de desplazamiento buscará el bean con la identificación de multipertesolver. En la configuración, el bean apunta a commonsmultipARTRESOLVE, lo que implementa la interfaz multiparthesolver.
El cuarto paso aquí determinará si el archivo multipart es el método ISMULTIPART. Return true: se llamará al método multiparthesolver. Pasar httpservletRequest devolverá un objeto multiphttpServletRequest, y luego se procesará un despachadorServlet a la capa del controlador. Return false: se ignorará y continuará pasando httpservletRequest.
En MVC, debe configurarlo en el archivo de configuración webapplicationContext.xml de la siguiente manera:
<bean id = "multipartResolver"> <Property name = "defaultEncoding" value = "utf-8"/> <propiedad name = "maxUploadSize" valor = "100000000"/> <propiedad name = "uploadTempDir" value = "fileUpload/temp"/> </bean>
Spring Boot se ha configurado automáticamente, solo úselo directamente, no hay problema con hacer una prueba. Hay un tamaño de límite de carga predeterminado, pero en el desarrollo real todavía hacemos algunas configuraciones.
Como sigue en la aplicación. Properties:
#Configuración de múltipar#Soporte predeterminado Soporte de archivo Super Spring.http.multipart.enabled = true#Directorio de carga de archivo Spring.http.multipart.location =/tmp/xunwu/images/#tamaño máximo de archivo soportado spring.http.multipart.max-File-size = 4mb#Máximo Tamaño de solicitud compatible spring.http.multipart.max-request-size = 20mb
Por supuesto, también puede escribir clases de configuración para implementarlas, y las específicas no se mostrarán.
Después de leer lo anterior, debe tener un comprensión aproximada. Hablemos de ello aquí. La primavera proporciona el analizador de multipart: multipartresolver. Lo anterior es CommonsMultipartResolver. Se implementa en base a una carga de archivos de terceros de los comunes. Esto también es algo antes de Servlet 3.0. Después de 3.0+, tampoco puede confiar en bibliotecas de terceros. Puede usar StandardServletMultIPartresolver, que también implementa la interfaz multipráctica. Podemos echar un vistazo a su implementación:
* Copyright 2002-2017 El autor original o autores. org.springframework.web.multipart.multiparTexception; import org.springframework.web.multipart.multiparthttpservletRequest; import og.springframework.web.multipart.multipartresolver;/** * Implementación estándar de la {@link multipartresolver}, basada en el servicio, basado en el servtlet * basado en el servtlet * basado en el servtlet * basado en el servtet. 3.0 {@link javax.servlet.http.part} API. * Se agregará como frijol "multipARTRESOLVER" a un contexto de Spring DispatcherServlet, * sin ninguna configuración adicional en el nivel de frijoles (ver más abajo). * * <p> <b> nota: </b> Para usar el análisis multipart basado en Servlet 3.0, * debe marcar el servlet afectado con una sección "multipart-config" en * {@code web.xml}, o con un {@link javax.servlet.servlet.sultipartconfigelement} * en el registro de servletes programático, o (en el caso de un caso de servlet). {@link javax.servlet.annotation.multipartconfig} anotación * en su clase de servlet. Los ajustes de configuración, como los tamaños máximos o * las ubicaciones de almacenamiento, deben aplicarse en ese nivel de registro de servlet; * Servlet 3.0 no permite que se establezcan en el nivel de múltiplesquistar. * * @author JUERGEN HOELLER * @since 3.1 * @see #setresolvelazily * @see httpservletRequest #getParts () * @see org.springframework.web.multipart.commons.commonsmultipartresolver */public class de clase de rentable resolvelazily = false; /** * Establezca si debe resolver la solicitud de solicitud de multipart Lazy Lazily en el momento de * Acceso de archivo o parámetros. * <P> El valor predeterminado es "falso", resolviendo los elementos multipart inmediatamente, lanzando * las excepciones correspondientes en el momento de la llamada {@link #resolvemultipart}. * Cambie esto a "verdadero" para el análisis de múltiples perezosos, lanzando excepciones de análisis * Una vez que la aplicación intenta obtener archivos o parámetros multipart. */ public void setresolvelazily (boolean resolvelazily) {this.resolvelazily = resolvelazily; } @Override public boolean isMultipart (httpservletRequest solicitud) {// misma comprobación que en los comunes fileUpload ... if (! "Post" .equals (request.getMethod (). TOlowerCase ())) {return false; } Cadena contentType = request.getContentType (); return (contentType! = null && contentType.tolowerCase (). startswith ("multipart/")); } @Override public MultiparthttpServletRequest resolvemultipart (httpservletRequest solicitud) lanza múltipleTexception {return new StandardMultiparthttPservletRequest (request, this.resolvelazily); } @Override public void CleanUpMultIPart (MultipHtttpServletRequest solicitud) {// para estar en el lado seguro: eliminar explícitamente las piezas, // pero solo piezas de archivo real (para compatibilidad de resina) try {para (parte parte: request.getParts ()) {if (request.getFile (parte.getName ())) }}} Catch (Showable Ex) {logFactory.getLog (getClass ()). Warn ("No se pudo realizar la limpieza de elementos multipart", ex); }}}Aquí está la última clase de configuración de implementación de la prueba que escribí antes. Puedes echarle un vistazo brevemente para entender:
paquete com.bj.config; import org.springframework.boot.autoconfigure.condition.conditionAlonMissingBean; import org.springframework.boot.autoconfigure.web.multipartPerties; import og.springfringframework.boot.properties.eenaberties; org. org.springframework.web.servlet.dispatcherservlet; import javax.servlet.multipartconfigelement;@configuration@habilitéisegurtionProperties (multipartproperties.class) de clase pública fileUploadconfig {private final multiproperties multipartproperties; Public FileUploadConfig (multipartproperties multipartProperties) {this.multipartProperties = multipartProperties; } / *** Registre analizador* @return* / @Bean (name = DispatcherServlet.multipart_resolver_Bean_Name) @conditionAlonMissingBean (multipartResolver.class) public stoSletMultipartresolver multipResolver () StandardS.VervletMultIPartresolver (); multipartResolver.setResOlzilyily (multipartproperties.isresolvelazily ()); return multipartResolver; } / *** Sube la configuración* @return* / @bean @conditionalonmissingbean public multipartconfigelement multipartConfigelement () {return this.multipartproperties.createMultipartConfig (); }}Resumir
Lo anterior es el principio de carga de archivos de arranque de Spring introducido por el editor. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!