Zunächst müssen wir wissen, was Spring Boot ist. Lassen Sie mich hier kurz darüber sprechen. Spring Boot kann als Framework in einem Framework angesehen werden ---> integriert verschiedene Frameworks wie Sicherheit, JPA, Daten, Cloud usw. Es muss sich nicht um die Konfiguration kümmern und kann schnell mit der Entwicklung beginnen. Wenn Sie interessiert sind, können Sie das Prinzip der automatisierten Konfigurationsimplementierung verstehen. Im Wesentlichen ist es die bedingte Konfigurationsimplementierung von Frühjahr 4.0. Wenn Sie die Wetten tief lassen, werden Sie es sehen.
Das Prinzip des Hochladens von Spring -Boot -Dateien ist tatsächlich Spring MVC, da dieser Teil der Arbeiten eher durch Spring MVC als durch Spring -Start erledigt wird. Wie verarbeitet SpringMVC den Datei -Upload -Prozess?
Bild:
Zuerst startet das Projekt die relevante Konfiguration und führt dann den zweiten Schritt oben aus. Der DispatcherServlet sucht nach der Bean mit der ID von Multipartresolver. In der Konfiguration verweist die Bean auf CommonsMultipartresolve, was die Multipartresolver -Schnittstelle implementiert.
Der vierte Schritt hier bestimmt, ob die Mehrteil -Datei die Ismultipart -Methode ist. Return True: Die Multipartresolver -Methode wird aufgerufen. Durch das Bestehen von httpServletRequest wird ein MultiparthttpServletRequest -Objekt zurückgegeben, und dann wird ein DispatcherServlet in die Controller -Schicht verarbeitet. Return Falsch: Es wird ignoriert und passieren weiterhin httpServletRequest.
In MVC müssen Sie es in der Konfigurationsdatei wie folgt konfigurieren: xml:
<bean id = "multipartresolver"> <Eigenschaft name = "defaultCoding" value = "utf-8"/> <Eigenschaft name = "maxUploadSize" value = "100000000"/> <Eigenschaft name = "uploadTempDir" value = "DateiElpload/temp"/> </bean>
Spring Start wurde automatisch konfiguriert. Verwenden Sie ihn einfach direkt. Es gibt kein Problem mit einem Test. Es gibt eine Standard -Upload -Grenzgröße, aber in der tatsächlichen Entwicklung stellen wir immer noch einige Konfigurationen vor.
Wie folgt in application.Properties:
#MultiPart-Konfiguration#Default-Support-Datei hochladen Spring.http.multipart.enabled = true#Datei-Upload-Verzeichnis Spring.htttp.multipart.location =/tmp/xunwu/Images/#Maximum unterstützte Dateigröße Spring.http.multipart.max-file-size Spring.http.multipart.max-Request-Größe = 20 MB
Natürlich können Sie auch Konfigurationsklassen schreiben, um sie zu implementieren, und die spezifischen werden nicht angezeigt.
Nach dem Lesen des oben genannten müssen Sie ein hartes Verständnis haben. Reden wir hier darüber. Der Frühling bietet einen Mehrfach -Parser: Multipartresolver. Das obige ist CommonsMultipartresolver. Es wird basierend auf einem Hochladen eines Dritten von Commons -Dateien implementiert. Dies ist auch etwas vor Servlet 3.0. Nach 3.0+ können Sie sich auch nicht auf Bibliotheken von Drittanbietern verlassen. Sie können StandardsServletMultipartresolver verwenden, was auch die Multipartresolver -Schnittstelle implementiert. Wir können einen Blick auf seine Implementierung werfen:
* Copyright 2002-2017 Der ursprüngliche Autor oder Autor.Package org.springframework.web.multipart.Support; Import Javax.Servlet.http.httpServletrequest; import Javax.Servlet.http.Part; org.springframework.web.multipart.multipartException; import org.springframework.web.multipart.multiparthttpServletRequest; import org.springframework.web.multipart.multipartresolver; Das Servlet 3.0 {@link javax.servlet.http.part} api. * Als "Multipartresolver" -Bohne zu einem Spring -DispatcherServlet -Kontext hinzugefügt werden, * ohne zusätzliche Konfiguration auf Bean -Ebene (siehe unten). * * <p> <b> Hinweis: </b> Um den betroffenen Servlet mit einem Multipart-Config-Abschnitt in * {@Code web.xml} oder mit einer @link javax.Servlet.multipartconform} * in programmatischer Signal-Registrierung or (@code web.xml}) mit einem "mehrteiligen Konfigurationsabschnitt" zu verwenden, um das betroffene Servlet mit einem Multipart-Parsen zu verwenden, müssen Sie das betroffene Servlet verwenden. {@link javax.servlet.annotation.multiPartConfig} Annotation * auf Ihrer Servlet -Klasse. Konfigurationseinstellungen wie maximale Größen oder * Speicherorte müssen auf dieser Registrierungsebene angewendet werden. * Servlet 3.0 lässt nicht zu, dass sie auf die Multipartresolver -Ebene eingestellt werden. * * @Author Juergen Hoeller * @Since 3.1 * @see #setResolvelazy * @see httpServletRequest #GetParts () * @see org.springFramework Resolvelazy = falsch; /** * Legen Sie fest, ob die Mehrteilartikelnanforderung faul zum Zeitpunkt der Datei oder des Parameterzugriffs fauler Anforderung beheben soll. * <P> Standard ist "false", die die mehrteiligen Elemente sofort auflöst und * entsprechende Ausnahmen zum Zeitpunkt des Anrufs {@link #ResolvemultiPart} aufrufen. * Schalten Sie dies auf "true" für faule mehrteilige Parsen und werfen Sie Parse -Ausnahmen ab * Sobald die Anwendung versucht, mehrteilige Dateien oder Parameter zu erhalten. */ public void setResolvelazy (boolean Resolvelazy) {this.resolvelazy = Resolvelazy; } @Override public boolean ismultiPart (httpServletRequest -Anforderung) {// gleiche Überprüfung wie in Commons FileUpload ... if (! "Post" .equals (request.getMethod (). TOlowerCase ()) {return false; } String contentType = request.getContentType (); return (contentType! } @Override public multipartTtpServletRequest ResolvemultiPart (httpServletRequest -Anfrage) löst MultipartException aus {neuer StandardmultipartTtpServletRequest (Anfrage, this.resolvelazy); } @Override public void CleanUpMultiPart (MultiparthttpServletRequest -Anforderung) {// auf der sicheren Seite: explizit die Teile löschen, //, aber nur tatsächliche Datei -Teile (für Harzkompatibilität) Try {for (Teil: Request.GetParts ()) {if (partFile.getFile) (Teil. }}} catch (throwable ex) {logFactory.getLog (getClass ()). Warn ("Die Reinigung von Multipart -Elementen nicht durchführen", Ex); }}}Hier ist die letztere Implementierungskonfigurationsklasse des Tests, den ich zuvor geschrieben habe. Sie können es sich kurz ansehen, um zu verstehen:
Paket com.bj.config; import org.springframework.boot.autoconfigure.condition.Conditionalonmissingbean; org.springframework.context.annotation.bean; import org.springframework.context.annotation org.springFramework.web.servlet.DispatcherServlet; importieren javax.servlet.multiPartConfigelement;@configuration@EnableConfigurationProperties (MultipartProperties.Class). public FileUploadConfig (MultipartProperties MultiPartProperties) {this.multiPartProperties = MultipartProperties; } /** * Register parser* @return */ @Bean(name= DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) @ConditionalOnMissingBean(MultipartResolver.class) public StandardServletMultipartResolver multipartResolver(){ StandardServletMultipartResolver multipartResolver = new StandardsServletMultipArtresolver (); Multipartresolver.setResolvelazy (multipartProperties.isresolvelazy ()); return multipartresolver; } / *** Konfiguration hochladen* @return* / @bean @conditionalonmissingBean public MultiPartConfigelement MultiPartConfigelement () {return this.multiPartProperties.CreateMultiPartConfig (); }}Zusammenfassen
Das obige ist das Prinzip der vom Editor eingeführten Spring -Boot -Datei hochgeladen. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!