Vorne schreiben
Wenn es um Datei -Uploads geht, müssen wir zunächst über Geschäftslogik sprechen. Wenn jeder die hochgeladenen Dateien (z. B. Anzeigen oder Banner auf der Homepage) sehen kann, setzen wir das Bild in den statischen Ressourcenbereich (denselben Ort wie CSS und JS). Wenn die Datei geschützt ist (z. B. kann der Benutzer nur die von sich selbst hochgeladenen Fotos anzeigen), speichern wir sie an einem Ort auf dem Server, an dem die Bilder speziell gespeichert sind.
Dieses Beispiel zeigt die Methode zum Hochladen von Dateien, die an zwei Stellen gespeichert sind. Nach dem Hochladen als Erweiterung wird auch die Funktion zum Anzeigen von hochgeladenen Dateien und zum Herunterladen von hochgeladenen Dateien hinzugefügt.
Vorbereitung
Konfigurieren Sie SpringMVC- und Importieren von Commons -Paketen
Konfigurieren Sie den Dateiparser in mvc-servlet.xml hochladen
<!-Datei hochladen Parser-> <bean id = "multipartresolver"> <Eigenschaft name = "maxUploadsize" value = "1000000"/> <Eigenschaft name = "defaultCoding" value = "utf-8"/> </bean>
Speichern in statischen Ressourcenbereichen
1. Speicherort:
Im Projekt gespeichert, ist der Weg also der Weg relativ zum Projekt.
/{yourProject}/webapp/static/img
2. Konfigurieren Sie den antwortenden Handler
@ControllerPublic Class UploadController {@getmaping ("/upload") public String uploadHandler () {return "upload"; } @Postmapping ("/upload/static") public void WriteStatic (httpServletRequest -Anfrage, redirectTributes redirectTributes, @RequestParam ("Dateiname") MultiPartFile -Datei {if (! Datei). + "statisch/img/"; // den Namen der Quelldatei erhalten, die vom Benutzer Zeichenfolge Dateiname = Datei.GetOriginalFileName () hochgeladen wurde; // Erstellen Sie eine neue Dateidatei1 = neue Datei (Pfad, Dateiname); // Schreiben Sie die Datei in Datei.transferto (Datei1); redirectAttributes.addflashAttribute ("Nachricht", "auf statischen Erfolg hochladen"); zurückgeben "Redirect:/Upload"; } else {redirectAttributes.addflashAttribute ("meldung", "Upload -Datei kann nicht leer sein"); zurückgeben "Redirect:/Upload"; }}}Auf dem Server speichern
1. Speicherort dieses Beispiels:
An einem bestimmten Ort auf dem Server gespeichert, hat nichts mit dem Projekt zu tun, daher ist die Adresse ein absoluter Weg.
/User/mac/desktop/imgtemp/ist der absolute Pfad zum Verzeichnis.
2. Konfigurieren Sie den antwortenden Handler
... @postMapping ("/upload/disk") public String writeTodisk (httpServletRequest -Anforderung, @RequestParam ("Dateiname") MultiPartFile -Datei, recirectTTributes recirectRectTributes) {if (! Iisempty ()) {// // // die Quelldatei -Namensname = FileName = FileName = FileName = FileName // den Dateiordner -Pfad String path = "/user/mac/desktop/imgtemp/" abrufen; // Erstellen Sie eine neue Dateidatei1 = neue Datei (Pfad, Dateiname); // Datei -Datei schreiben.transferto (Datei1); }} ...Erweiterter Teil (Ansicht und Download von Dateien)
Da die Antwort die Datei in Form eines Streams übergeben soll, müssen wir den Mimie -Typ der Antwort korrekt einstellen, um vom Browser korrekt analysiert zu werden. Der Standard-Mimie-Typ der Anwendungsdatei ist Anwendung/Oktettstrom. Nachdem MIME auf diesen Wert gesetzt wurde, wird der Browser nicht automatisch ausgeführt oder fragen, um solche Dateien auszuführen, und lädt die Datei direkt in die lokale Region in Form der Behandlung von Anhängen herunter.
Weitere Interpretationen von Mimie finden Sie in diesem Artikel
Wenn wir den Namen der Download-Datei anpassen möchten, müssen wir die Inhaltsdispositionsnachricht festlegen.
Inhaltsdisposition Der Nachrichtenheader zeigt die Form der angestellten Antwort an, unabhängig davon, ob es sich um Inline (d. H. Eine Webseite oder einen Teil einer Seite) handelt oder in Form eines Anhangs lokal heruntergeladen und gespeichert wird.
Weitere Informationen zur Inhaltsdisposition finden Sie in diesem Artikel
...@getMapping ("/download/bydefault") public void getImgByDefault (@RequestParam String Dateiname, @RequestParam (erforderlich = false, defaultValue = ") String Savename), httpServletResponse -Antwort {if (StringUtils.isempty (Filename)) {Antwort {{{Antwort {{{{{{{{SendError (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) (404) zurückkehren; } // Pfad der Dateispeicher String path = "/user/mac/desktop/imgtemp/"; // neue Dateidatei = neue Datei (Pfad, Dateiname); if (! file.exists ()) {response.sendError (404); zurückkehren; } // Wenn der Savename des Anforderungsparameters nicht leer ist, laden Sie die Datei ab (! Stringutils.isempty (Savename)) {// Die Antwort Länge der Antwort Länge festlegen. // Setzen Sie den MIME-Typ der Antwort auf Anwendung/Oktett-Stream-Antwort. Savename = new String (Savename.getBytes ("UTF-8"), "ISO8859-1"); // Inhaltsdisposition auf den Anhang festlegen; Dateiname = Savename Antwort.Setheader (httpheaders.content_disposition, "Attemment; Dateiname =/" "+Savename+"/""); } // Lesen Sie den Dateieingabestream is = new FileInputStream (Datei); OutputStream os = response.getOutputStream (); // Ausgabedatei ioutils.copy (IS, OS); os.flush (); os.close (); is.close ();}Wir können auch den ByteArrayHttpMessageConverter -Konverter verwenden, der mit SpringMVC ausgeht, um Dateien auszugeben, die die HTTPMessAgeConverter -Schnittstelle implementiert. Alle MIME-Anfrageinformationen können gelesen werden, und die Mime der Antwortinformationen ist Anwendung/Oktettstrom
...@getMapping ("/download/byconvert") public httpentity <Byte []> getImgByConvert (@RequestParam String Dateiname, @RequestParam (erforderlich = false, defaultValue = ") String Savename) {if (StringUtils.ISSeMPty (filename)) {{{{filename) {filename) {filename) {filename) {filename) {filename) {filename) } String path = "/user/mac/desktop/imgtemp/"; Datei Datei = neue Datei (Pfad, Dateiname); if (! file.exists ()) {Neue Antwortrückgabe <> (httpstatus.not_found); } Httpheaders headers = new httpheaders (); if (! Stringutils.isempty (Savename)) {Headers.SetContentType (mediateType.application_octet_stream_value); Headers.SetContentLength (Datei.length ()); Savename = New Sting (Savename.getBytes ("UTF-8"), "ISO8859-1"); Headers.Add (httpheaders.content_disposition, "Anhang; Dateiname =/" " + Savename +"/""); } else {Headers.setContentType (mediateType.image_png); } Neue httpentity <> (filecopyutils.copyTobytearray (Datei), Header);};Upload.jsp
<%@ page contentType = "text/html; charset = utf-8" Sprache = "java"%> <%@ taglib prefix = "Form" uri = "http://www.sspringframework.org/tags/form"%> <%@ taglib prefix = "c" URI = "http://java.sun.com/jsp/jstl/core" %> <! docType html> <html> <head> <meta charset = "utf-8"> <meta name = "Ansichtsplatz" content = "width = Geräte-Width, Benutzer-scalable minimal-scale = 1,0 "> <meta http-äquiv =" x-ua-kompatible "content =" ie = edge "> <title> document </title> <link rel =" styleSheet "href ="/static/static/bootstrap-3.3.5-dist/css/bootstrap.cs "rel =" external nlowlowlowlowlowlowlowlowlowlows " Dateistreuung </h1> <c: if test = "$ {nicht leere meldung}"> <h2> $ {message} </h2> </c: if> <Formular: form engType = "MultiPart/Form-Data" Action = "/Upload/static"> upload zu/wob name = "uploadFile"> <button> surven </button> </Form: Form> <Formular: Form engType = "MultiPart/Form-Data" action = "/Upload/Disk"> <p> Upload auf disk </p> </p> <Label für = ""> Upload-Datei Upload-Datei </Label> </butth. href = "/download/bydefault? fileName = Dubbo.png" rel = "external nofollow" target = "_ leer"> Verwenden Sie die Standardmethode, um Dubbo -Bilder anzuzeigen, die auf disk </a> </button> <button> <a href = "/download/bydefault -filename = dubng.png & savng & SaveName = Dubb.Png" Dubng "dubng" dubng "dubbo.Png & saveName" angezeigt wurden. Die Standardmethode zum Herunterladen von Dubbo -Bildern </a> </button> </div> <div> <button> <a href = "/download/byconvert? fileName = dubbo.png" rel = "external nofollow"> Verwenden Sie die Standardmethode, um Dubbo -Bilder zu herunterladen </a> </button> </divlow> <divo. rel = "externer nofollow" target = "_ leer"> Verwenden Sie den MVC -Konverter, um Dubbo -Bilder auf Disk zu sehen </a> </button> <button> <a href = "/download/byconvert -Dateiname = Dubbo.png & SaveName = Dubng" RelNode ". </div> </div> </body> </html>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.