1. Breve descripción
Los datos en formato multipart dividen un formulario en múltiples partes, cada parte correspondiente a un campo de entrada. En el campo de entrada de formulario general, los datos de tipo texto se colocarán en su parte correspondiente, pero si se carga un archivo, su parte correspondiente puede ser binaria. Similar a esto:
2. Configure el analizador multipart
Aunque las solicitudes multipart pueden parecer complicadas, es fácil manejarlas en MVC de primavera. Antes de escribir un método de controlador para manejar la carga de archivos, debemos configurar un analizador multipart para decirle al desplazamiento alervlet cómo leer la solicitud de multipart.
Spring tiene dos implementaciones incorporadas de multiparthesolver:
Configuración de StandardServletMultIPartresolver:
1. Declaración de frijol:
Configuración en ApplicationContext.xml
La copia del código es la siguiente: <bean id = "multipartResolver" pincel: java; "> @bean (name =" multipartResolver ") público estándarsardservletmultiparTresolver getStandardservletMultipARTresOlver () {return NewsardServletMultInsolver ();}
Consejos: El nombre del analizador multipart debe ser múltiple, de lo contrario se informará un error.
2. Configurar los parámetros de carga:
* Configuración web.xml
<Servlet> <Servlet-name> DispatcherServlet </Servlet-Name> <Servlet-Class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <init-param> <amamname> contextciglocation </param-name> <amarr-value> classpath: application <ar carga-on-startup> 1 </load-on-startup> <multipart-config> <!-cargar en/tmp/upload directorio-> <bocation>/tmp/upload </bocation> <!-El tamaño del archivo es 2m-> <max-file-size> 2097152 </ax-file-size> <!-Toda la solicitud no existe 4M->>>>> <max-request-size> 4194304 </max-request-size> <!-Todos los archivos deben escribirse en disco-> <file-size-threshold> 0 </file-size-threshold> </multipart-config> </servlet> <ervlet-mapping> <ervlet-name> desembolservletelet </servlet-name> <url-pattern>/<</</servlet> <ervlet> <ervlet-name> desembolsado> servlet </servlet-name> <url-pattern>/<</</servlet> <servlet> <ervlet-name> desembolsandovlet </servlet-name> <url-pattern>/<</</servlet> <servlet> <ervlet-name> desembolsado> </Servlet-mapping>
* Configuración en la clase de configuración
Heredado en la clase de configuración de AbstractAnnotationConfigDispatcherservletInitializer
@Override protegido void customizeReGistration (servletregistration.dynamic registro) {// cargar en el directorio /tmp /upload, el tamaño del archivo es 2m, la solicitud completa no excede 4m, y todos los archivos deben escribirse en el registro de disco. Multipartconfigelement ("e: // upload_ftp", 2097152,4194304,0)); }Configuración de CommonSMultipartResolver:
1. Declarar frijoles y configurar los parámetros de carga
<bean id = "multipartResolver"> <!-Establecer el directorio de carga/tmp/upload; La capacidad máxima del archivo se establece en 2m; El tamaño de memoria máximo se establece en 0, lo que significa que todos los archivos se escribirán en el disco; La capacidad máxima general de la solicitud de multipart no se puede establecer-> <propiedad name = "uploadTempDir" valor = "/tmp/upload"/> <propiedad name = "maxUploadSize" value = "2097152"/> <Property Name = "MaxInMemorySize" Value = "0"/> </bean>
la diferencia:
1.
2. CommonsMultipartResolver no obliga a establecer una ruta de archivo temporal. Por defecto, esta ruta es el directorio temporal del contenedor de servlet. StandardServLetMultIPartresolver debe establecer la ruta del archivo temporal para ejecutar normalmente. (Los directorios cargados mencionados anteriormente son todas las rutas de archivo temporales)
3. SpringMVC maneja solicitudes
1. Formulario front-end
<Form Action = "/Picture" Method = "Post" Enctype = "multipart/form-data"> <input type = "file" name = "imagen"> <input type = "enviar"> </form>
TIPS: Enctype = "multipart/formy-data" debe configurarse para decirle a SpringMVC que esta es una solicitud de multipart.
2. Backend MVC acepta solicitudes
@RequestMapping (valor = "/imagen", método = requestmethod.post) public string gethome (@RequestPart ("imagen") imagen multipartfile) lanza ioexception {string name = picture.getName (); byte [] bytes = image.getBytes (); image.transferto (nuevo archivo ("/"+image.getoriginalFileName ())); // Al guardar en el sistema de archivos aquí, use una ruta relativa, por ejemplo, la configuración aquí es /. Basado en el directorio de carga configurado. Es decir, la ruta del archivo E:/ upload_ftp/ es el directorio guardado return "HOME"; }Consejos: 1. @RequestPart ("Imagen"): Cuando se envía el formulario de registro, el atributo de esencia P dará una matriz de bytes, que contiene los datos de la parte correspondientes en la solicitud (especificada a través de @requestPart). Si el usuario envía el formulario sin seleccionar un archivo, la matriz estará vacía (en lugar de nula). Por lo tanto, incluso podemos usar la matriz de byte [] para recibir solicitudes multipart en lugar de múltiples filmes.
2. Multipartfile: Uso del método multiparto para recibir nos proporciona muchos métodos para llevar a cabo el próximo trabajo ...
3. Acepte archivos cargados en forma de parte
En cuanto al sujeto, no hay mucha diferencia entre la interfaz de pieza y el archivo multipart. En muchos casos, el nombre del método de pieza es exactamente el mismo que el nombre del método multipartfile. Hay algunas similitudes, pero ligeramente diferentes, como getSubmitItSitedFileName () correspondiente a getOriginalFileName (). Del mismo modo, Write () corresponde a transferto (), y con la ayuda de este método podemos escribir el archivo cargado en el sistema de archivos.
Vale la pena mencionar que si acepta las cargas de archivos a través de parámetros de pieza al escribir métodos del controlador, entonces no hay necesidad de configurar MultiprArtResolver. Solo cuando se usa MultipartFile, necesitamos multipartresolver.
@RequestMapping (valor = "/imagen", método = requestmethod.post) public string gethome (@RequestPart ("Imagen") Picture Picture) lanza IOException {image.write ("/"+picture.getSubMittedFileName ()); regresar "a casa"; }Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.