Tout d'abord, nous devons savoir ce qu'est Spring Boot. Permettez-moi d'en parler brièvement ici. Spring Boot peut être considéré comme un cadre dans un cadre ---> intègre divers cadres, tels que la sécurité, le JPA, les données, le cloud, etc. Il n'a pas besoin de se soucier de la configuration et peut rapidement démarrer le développement. Si vous êtes intéressé, vous pouvez comprendre le principe de l'implémentation de configuration automatisée. Essentiellement, il s'agit de l'implémentation de configuration conditionnelle de Spring 4.0. Si vous laissez les paris profonds, vous le verrez.
Le principe du téléchargement de fichiers de démarrage de printemps est en fait Spring MVC, car cette partie des travaux est effectuée par Spring MVC plutôt que par le démarrage de Spring. Alors, comment SpringMVC gère-t-il le processus de téléchargement de fichiers?
image:
Tout d'abord, le projet démarre la configuration pertinente, puis effectue la deuxième étape ci-dessus, le DispatcherServlet recherchera le bean avec l'ID de MultipartResolver. Dans la configuration, le bean pointe vers CommonsMultipartResolve, qui implémente l'interface multipartrersolver.
La quatrième étape ici déterminera si le fichier multiparte est la méthode Ismultupart. Return True: La méthode Multipartresolver sera appelée. La réussite de HttpServletRequest renverra un objet multiparthttpservletRequest, puis un Dispatcherservlet sera traité sur la couche de contrôleur. Retour false: il sera ignoré et continuera de passer HttpServletRequest.
Dans MVC, vous devez le configurer dans le fichier de configuration WebApplicationContext.xml comme suit:
<bean id = "MultipartResolver"> <propriété name = "Defayencoding" value = "utf-8" /> <propriété name = "maxuploadsize" value = "100000000" /> <propriété name = "uploadTempDir" value = "fileupload / temp" /> </ank>
Spring Boot a été configuré automatiquement, il suffit de l'utiliser directement, il n'y a aucun problème à faire un test. Il y a une taille de limite de téléchargement par défaut, mais dans le développement réel, nous effectuons toujours certaines configurations.
Comme suit dans l'application.properties:
# Multipart Config # Par défaut de support de la prise en charge du fichier Spring.http.multupart.enabled = True # Répertoire de téléchargement de fichiers Spring.http.multiparpart.location = / tmp / xunwu / images / # Taille de fichier maximum Spring.http.multupart.max-file-size = 4MB # Taille de demande maximale prise en charge maximale printemps.http.multupar.max-request-size = 20 Mo
Bien sûr, vous pouvez également écrire des classes de configuration pour les implémenter, et celles spécifiques ne seront pas affichées.
Après avoir lu ce qui précède, vous devez avoir une compréhension approximative. Parlons-en ici. Spring fournit l'analyseur de multiparte: MultipartResolver. Ce qui précède est CommonsMultipartresolver. Il est implémenté en fonction d'un tiers du téléchargement de fichiers Commons. C'est aussi quelque chose avant Servlet 3.0. Après 3.0+, vous ne pouvez pas non plus compter sur des bibliothèques tierces. Vous pouvez utiliser StandardServletMultipartreSolver, qui implémente également l'interface multipartrersolver. Nous pouvons jeter un œil à sa mise en œuvre:
* Copyright 2002-2017 L'auteur ou les auteurs d'origine.package org.springframework.web.multipart.support; import javax.servlet.http.part; import org.apache.commons.logging.logfactory; import org.springframework.web.multiparpart.multipartexception; import org.springframework.web.multipart.multiparthttpservletRequest; import org.springframework.web.multipartipart.multipartreSolver; / ** * Implémentation standard de l'interface {@link multiparTreSoLver}. 3.0 {@link javax.servlet.http.part} API. * À ajouter en tant que bean "Multipartresolver" dans un contexte Spring DispatterServlet, * sans aucune configuration supplémentaire au niveau du bean (voir ci-dessous). * * <p> <b> Remarque: </b> Afin d'utiliser l'analyse multiparte basée sur le servlet 3.0, * Vous devez marquer le servlet affecté avec une section "multipart-Config" dans * {@code web.xml}, ou avec une {@link javax.servlet.multuparpartConfigelement} * dans le service programmatique de l'inscription, ou (dans le cas de la courbe) * dans un programme programmatique, ou (dans le cas de la Coursure) * dans le service programmatique, ou (dans le cas de Customer) * dans le service programmatique, ou (dans le cas de AS) * dans le service programmatique, ou (dans le cas de Customer) * dans un programme programmatique, ou (dans le cas de Customer) * dans le service programme {@link javax.servlet.annotation.multipartingconfig} Annotation * sur votre classe de servlet. Les paramètres de configuration tels que des tailles maximales ou * les emplacements de stockage doivent être appliqués à ce niveau d'enregistrement du servlet; * Servlet 3.0 ne permet pas d'être réglés au niveau multipartrersolver. * * @Author Juergen Hoeller * @Since 3.1 * @see #SetResolvelazily * @see httpServletRequest # getParts () * @see org.springframework.web.multuparT.Commons.CommonsMultipartreSolver * / Public StandardServletMultiparTreSolver implémente MultiparTresolver. Resolvelazily = false; / ** * Définissez s'il faut résoudre la demande de demande multiparte paresseuse paresseusement au moment de * l'accès au fichier ou au paramètre. * <p> La valeur par défaut est "FALSE", résolvant immédiatement les éléments en multipart, lançant * des exceptions correspondantes au moment de l'appel {@link #resolvemultupartipart}. * Passez à cela en "vrai" pour l'analyse multiparte paresseuse, lançant des exceptions d'analyse * Une fois que l'application tente d'obtenir des fichiers ou des paramètres multipARS. * / public void setResolvelazily (booléen résolvelazly) {this.resolvelazily = résolvelazly; } @Override public booléen isMultupart (requette httpservletRequest) {// même chèque que dans Commons Fileupload ... if (! "Post" .equals (request.getMethod (). TolowerCase ())) {return false; } String contentType = request.getContentType (); return (contentType! = null && contenttype.tolowercase (). startSwith ("multipart /")); } @Override public multipartHTTTPServLetRequest ResolVeMultupar (HttpServLetRequest) lance MultiPartexception {return new StandardMultipartHTTPServLetRequest (request, this.resolvelazily); } @Override public void CleanUpMultupartip (MultiparthTTPServleRequest request) {// être du côté sûr: supprimez explicitement les pièces, // mais seulement les pièces de fichier réelles (pour la compatibilité de la résine) essayez {pour (partie partielle: request.getParts ()) {if (request.getFile (part.getName ())! }}} catch (Throwable ex) {logfactory.getLog (getClass ()). Warn ("Impossible d'effectuer le nettoyage des éléments en plusieurs reprises", ex); }}}Voici cette dernière classe de configuration d'implémentation du test que j'ai écrit auparavant. Vous pouvez y jeter un œil brièvement pour comprendre:
Package com.bj.config; import org.springframework.boot.autoconfigure.condition.conditionalonMissingBean; import org.springframework.boot.autoconfigure.web.multipartitproperties; import org. org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.web.multiparpart.multipartresolver; import org.springframework.web.multipart.support.standardservletmultipartrersolver; org.springframework.web.servlet.dispatcherservlet; Importer javax.servlet.multiparpartConfigelement; @ configuration @ apactimeConfigurationProperties (multipartProperties.class) FileploadConfig {private final multipartProperties multipartProperties; public fileUploadConfig (multipartProperties MultipartProperties) {this.MultiPartProperties = multipartProperties; } / ** * Enregistrer l'analyseur * @return * / @bean (name = dispatcherservlet.multipart_resolver_bean_name) @conditionalonMissingBean (multipartResolver.class) public standardServletMultipartResolver MultipartResolver () {newardServletMulPartreSolver StandardervletMultipartreSolver (); multipartresolver.setResolvelazily (multipartProperties.IsResolvelazily ()); RETOUR MultipartResolver; } / ** * Configuration de téléchargement * @return * / @bean @conditionalonMissingBean public multipartConfigelement MultipartConfigelement () {return this.multiPartProperties.CreateMultiPartConfig (); }}Résumer
Ce qui précède est le principe du téléchargement de fichiers de démarrage de Spring introduit par l'éditeur. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!