1. Kurzbeschreibung
Daten im mehrteiligen Format teilen eine Form in mehrere Teile, wobei jedes Teil einem Eingangsfeld entspricht. Im Feld Allgemeine Formulareingabe werden in ihrem entsprechenden Teil Text-Typ-Daten platziert. Wenn jedoch eine Datei hochgeladen wird, kann ihr entsprechender Teil binär sein. Ähnlich wie folgt:
2. Konfigurieren Sie den mehrteiligen Parser
Obwohl mehrteilige Anfragen kompliziert erscheinen mögen, ist es einfach, sie im Frühjahr MVC zu handhaben. Vor dem Schreiben einer Controller -Methode zum Verwandten von Datei -Upload müssen wir einen mehrteiligen Parser konfigurieren, um dem DispatcherServlet mitzuteilen, wie die Multipart -Anfrage gelesen wird.
Spring hat zwei integrierte Implementierungen von Multipartresolver:
Konfiguration von StandardsServletMultipartresolver:
1. Aussage Bean:
Konfiguration in applicationContext.xml
The code copy is as follows:<bean id="multipartResolver"brush:java;"> @Bean(name = "multipartResolver") public StandardServletMultipartResolver getStandardServletMultipartResolver(){ return new StandardServletMultipartResolver(); }
Tipps: Der Name des mehrteiligen Parsers muss Multipartresolver sein, andernfalls wird ein Fehler gemeldet.
2. Konfigurieren Sie Upload -Parameter:
* Web.xml -Konfiguration
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <Load-on-Startups> 1 </load-on-startup> <multipart-config> <!-Upload in/tmp/Upload-Verzeichnis-> <position>/TMP/Upload </loce> <!-Dateigröße ist 2m-> <max-file-size> 2097152 </max-file-size-size-<! <max-request-size>4194304</max-request-size> <!--All files must be written to disk--> <file-size-threshold>0</file-size-threshold> </multipart-config> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </Servlet-Mapping>
* Konfiguration in der Konfigurationsklasse
In der Konfigurationsklasse von AbstractAnnotationConfigDispatcherServletinitializer vererbt
@Override Protected Void Customizeregistration (ServletRetRegistration.Dynamic Registration) {// Hochladen in das Verzeichnis /TMP /Upload, die Dateigröße 2M, die gesamte Anfrage überschreitet nicht 4M, und alle Dateien müssen in die Festplattenregistrierung geschrieben werden. MultipartConfigelement ("E: // Upload_ftp", 2097152,4194304,0)); }CommonsMultipartresolver -Konfiguration:
1. Deklarieren Sie Bohnen und konfigurieren Sie Upload -Parameter
<bean id = "multipartresolver"> <!-Sagen Sie das Upload-Verzeichnis/TMP/Upload; Die maximale Dateikapazität wird auf 2 m eingestellt. Die maximale Speichergröße wird auf 0 gesetzt, was bedeutet, dass alle Dateien auf die Festplatte geschrieben werden. Die maximale Gesamtkapazität der Multiprart-Anforderung kann nicht festgelegt werden-> <Eigenschaft name = "uploadTempDir" value = "/tmp/upload"/> <Eigenschaft name = "maxUpleLoadSize" value = "2097152"/> <Eigenschaft Name = "MaxinMemorySize" value = "0"/> </lean>
der Unterschied:
1. CommonsMultipartresolver im Vergleich zu StandardsServletMultipARTresolver ist es unmöglich, die maximale Gesamtkapazität von Multipart -Anfragen festzulegen.
2. CommonsMultipartresolver erzwingt nicht, einen temporären Dateipfad zu setzen. Standardmäßig ist dieser Pfad das temporäre Verzeichnis des Servlet -Containers. StandardsServletMultipArtresolver muss den temporären Dateipfad festlegen, um normal auszuführen. (Die oben genannten hochgeladenen Verzeichnisse sind alle temporären Dateipfade)
3.. SpringMVC behandelt Anfragen
1. Formformformular
<form action = "/picture" methode = "post" engType = "MultiPart/Form-Data"> <Eingabe type = "Datei" name = "picture"> <Eingabe type = "subieren"> </form>
Tipps: EncType = "Multipart/Form-Data" muss festgelegt werden, um SpringMVC mitzuteilen, dass es sich um eine mehrteilige Anforderung handelt.
2. Backend MVC akzeptiert Anfragen
@RequestMapping (value = "/picture", method = requestMethod.post) public String Gethome (@RequestPart ("picture") MultiPartFile -Bild) löst IoException {String name = piction.getName () aus; byte [] bytes = piction.getBytes (); picture.transferto (neue Datei ("/"+picture.getoriginalFileName ())); // Verwenden Sie beim Speichern im Dateisystem hier einen relativen Pfad, beispielsweise die Konfiguration hier /. Basierend auf dem konfigurierten Upload -Verzeichnis. Das heißt, der Dateipfad e:/ upload_ftp/ ist das gespeicherte Verzeichnisrendite "Home"; }Tipps: 1. @RequestPart ("Bild"): Wenn das Registrierungsformular eingereicht wird, enthält das P -Essence -Attribut ein Array von Bytes, das die entsprechenden Teildaten in der Anforderung enthält (angegeben über @RequestPart). Wenn der Benutzer das Formular ohne Auswahl einer Datei einreicht, ist das Array leer (und nicht null). So können wir sogar das Byte [] -Array verwenden, um mehrteilige Anfragen anstelle von MultipartFile zu erhalten.
2. MultipartFile: Verwenden der MultipartFile -Methode zum Empfangen haben uns viele Methoden, um die nächsten Arbeiten auszuführen ...
3. Akzeptieren Sie hochgeladene Dateien in Form eines Teils
Was das Subjekt betrifft, so gibt es keinen großen Unterschied zwischen der Teilschnittstelle und der MultipartFile. In vielen Fällen entspricht der Name der Teilmethode genau dem Namen der MultipartFile -Methode. Es gibt einige Ähnlichkeiten, aber leicht unterschiedlich, wie z. In ähnlicher Weise entspricht Write () TransferTo () und mit Hilfe dieser Methode können wir die hochgeladene Datei in das Dateisystem schreiben.
Wenn Sie beim Schreiben von Controller -Methoden beim Schreiben von Controller -Methoden Datei -Uploads durch Teilenparameter akzeptieren, ist es nicht erforderlich, Multipartresolver einzurichten. Nur bei Verwendung von MultipartFile benötigen wir Multipartresolver.
@RequestMapping (value = "/picture", method = requestMethod.post) public String Gethome (@RequestPart ("picture") Teil Bild) löst IOException {picture.write ("/"+picture.getSubMondedFileName ()) aus; Heimkehr"; }Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.