Die aktuelle Anforderung lautet: Es gibt eine Schaltfläche zum Hochladen von Dateien. Wenn wir auf die Schaltfläche klicken, können wir die hochzuladende Datei auswählen. Nach der Bestätigung wird das Bild auf der Benutzeroberfläche angezeigt. Hinweis: Dieses Projekt verwendet Vue für das Front-End, SSM für das Back-End, Tomcat für den Server und MySQL für die Datenbank. Umsetzungsideen:Frontend-Schnittstelle: Wenn der Benutzer auf die Schaltfläche „Datei hochladen“ klickt, das hochzuladende Bild auswählt und auf „Bestätigen“ klickt, sollten die Bilddaten an das Backend übertragen werden. Wenn das Backend nach der Verarbeitung das Ergebnis zurückgibt, führt das Frontend die nachfolgenden Arbeiten basierend auf dem Antwortergebnis aus. Backend: Wenn das Backend die vom Frontend gesendeten Daten erhält, speichert es die Bilddatei in einem festen Ordner (ich habe lange über dieses Problem nachgedacht. Ich denke, es sollte auf dem Server gespeichert werden. Ursprünglich habe ich es in einem lokalen Ordner gespeichert und dann den Pfad verwendet, um darauf zu verweisen. Ehrlich gesagt ist das wirklich dumm. Ich bin auf viele Probleme gestoßen und habe lange daran gearbeitet. Ich habe wegen meiner eigenen Dummheit geweint). Nachdem die Datei gespeichert wurde, wird das Antwortergebnis zurückgegeben. Bei Erfolg wird direkt der relative Pfad des aktuellen Bildes zurückgegeben und das Frontend zeigt das Bild entsprechend diesem Pfad an. Das Hauptproblem besteht nun darin, die Bildressourcen unter Tomcat bereitzustellen. Um dieses Problem zu lösen, habe ich unter Tomcat ein virtuelles Verzeichnis erstellt und alle Bilddateien, Videos und anderen Ressourcen werden in diesem Verzeichnisordner abgelegt. Die Schritte zum Hochladen von Bildern im Backend sind wie folgt: 1. Erstellen Sie ein virtuelles Verzeichnis unter Tomcat Erstellen Sie ein Verzeichnis mit dem Namen FileDir im Stammverzeichnis von Tomcat (natürlich kann dieses Verzeichnis auch woanders erstellt werden) Konfigurieren Sie in Tomcats conf/server.xml das virtuelle Verzeichnis. Fügen Sie die folgende Zeile hinzu Fügen Sie dem virtuellen Verzeichnis ein Bild 1.jpg hinzu und starten Sie den Tomcat-Test. Besuchen Sie: http://localhost:8080/FileDir/1.jpg. Wenn Sie Bilder anfordern können, war die Konfiguration erfolgreich. 2. Backend-Konfiguration Einführung von JAR-Paketen zum Hoch- und Herunterladen von Dateien: commons-fileupload-1.3.2.jar und commons-io-1.3.2.jar Schreiben Sie die SpringMVC-Konfigurationsdatei und fügen Sie den folgenden Code hinzu: <!-- Konfigurieren des Upload-Parsers --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- Setzt das Anforderungscodierungsformat --> <Eigenschaftsname="Standardkodierung" Wert="UTF-8"></Eigenschaft> </bean> Erstellen Sie eine Controllerklasse FileUploadController zum Hochladen von Dateien Paket com.wyf.controller; importiere java.io.File; importiere java.util.UUID; importiere javax.servlet.http.HttpServletRequest; importiere org.springframework.beans.factory.annotation.Autowired; importiere org.springframework.web.bind.annotation.RequestMapping; importiere org.springframework.web.bind.annotation.RequestMethod; importiere org.springframework.web.bind.annotation.RequestParam; importiere org.springframework.web.bind.annotation.RestController; importiere org.springframework.web.multipart.MultipartFile; importiere com.wyf.po.Result; importiere com.wyf.service.FileServlet; /** * Datei-Upload-Controller * * @Autor ASUS * */ @RestController öffentliche Klasse FileUploadController { @Autowired privates FileServlet FileServlet; /** * Bildupload ausführen* * Lösen Sie das Problem verstümmelter chinesischer Schriftzeichen, wenn das Front-End die Back-End-Daten abruft: produced={"application/json; charset=UTF-8"} */ @RequestMapping(Wert = "/uploadImg", Methode = RequestMethod.POST, erzeugt = { "application/json; Zeichensatz=UTF-8" }) öffentliches Ergebnis handleUploadImg(@RequestParam("file") MultipartFile Datei, HttpServletRequest Anfrage) { // Überprüfen, ob die hochgeladene Datei existiert if (!file.isEmpty()) { // Den Originalnamen der hochgeladenen Datei abrufen String originalFilename = file.getOriginalFilename(); //Pfad zum Speichern von BildernString rootPath = "G:\\Installationspaket\\Tomcat\\Installationspaket\\Tomcat 7.0\\FileDir\\"; // Speicherverzeichnis für hochgeladene Dateien festlegen String path = "\\upload\\images\\applyShop"; String dirPath = rootPath + Pfad + "\\"; Datei Dateipfad = neue Datei (Verzeichnispfad); // Wenn die Adresse, unter der die Datei gespeichert ist, nicht existiert, erstellen Sie zuerst das Verzeichnis if (!filePath.exists()) { Dateipfad.mkdirs(); } // String umbenennen newFileName = UUID.randomUUID() + "_" + originalFilename; versuchen { // Verwenden Sie die Schnittstellenmethode MultipartFile, um die Datei an den angegebenen Speicherort hochzuladen file.transferTo(new File(dirPath + newFileName)); } Fang (Ausnahme e) { e.printStackTrace(); returniere neues Ergebnis (false, „Upload-Fehler“); } // Relativen Pfad zurückgeben String srcPath = path + "\\" + newFileName; fileServlet.addUploadFIle(Quellenpfad); gib ein neues Ergebnis zurück (true, srcPath); } returniere neues Ergebnis(false, „Datei existiert nicht“); } } Zur Rückgabe der Daten wird hier eine Result-Klasse verwendet, mit der die zurückgegebenen Ergebnisinformationen gekapselt und im JSON-Format an das Frontend zurückgegeben werden. Der Code lautet wie folgt: öffentliche Klasse Ergebnis { privates Boolesches Flag; //Verarbeitungsergebniskennung private String-Nachricht; //Zurückgegebene Ergebnisinformationen /* get() und set() weglassen*/ } Die Vue-Front-End-Schnittstelle sendet eine Anforderung an das Back-End und erhält den Bildpfad durch dynamische Bindung des src-Attributs. <Vorlage> <div Klasse="Hochladen"> <div Klasse="img-container"> <!-- Vorschaubild hochladen --> <img :src="src" alt /> </div> <!-- Eingabe zum Hochladen von Dateien --> <form class="Eingabedatei" enctype="multipart/form-data" method="post"> <input type="file" ref="upload" name="uploadImg" id="file" @change="getFile" multiple /> <!-- Label hat ein For-Attribut, das auf die eindeutige ID der Eingabe verweist, daher ist ein Klick auf Label gleichbedeutend mit einem Klick auf die Eingabe --> <label for="file">Bild hochladen</label> </form> </div> </Vorlage> <Skript> Standard exportieren { Daten() { zurückkehren { quelle:erfordern('../../assets/dist/images/admin.jpg'), srcPath:''//Relativer Pfad des Bildes}; }, Methoden: { getFile(e) { let files = e.target.files[0]; //Hochgeladene Bildinformationen abrufen let formData = new FormData() formData.append('Datei',Dateien) dies.$axios.post("/api/uploadImg",formData).dann(Ergebnis=>{ wenn(Ergebnis.Daten.Flag){ this.srcPath = Ergebnis.Daten.Nachricht dies.src = `/imgURL${this.srcPath}` }anders{ Konsole.Protokoll(Ergebnis.Daten.Nachricht) } }) } } }; </Skript> An dieser Stelle können Sie grundsätzlich Bilder hochladen und in der Vorschau anzeigen. Es gibt jedoch Fehler und entstellte chinesische Schriftzeichen . Wenn der Bildpfad chinesische Zeichen enthält, kann die Quelle nicht analysiert werden. Ich versuche schon seit langem, dieses Problem zu lösen. Ich habe verschiedene Baidu-Suchen durchgeführt und schließlich die Methode zum Ändern der server.xml-Konfigurationsdatei von Tomcat verwendet. Meine Lösung besteht darin, die Tomcat-Konfigurationsdatei server.xml zu ändern Gefunden in Tomcats server.xml <Connector Verbindungstimeout="20000" Port="8080" Protokoll="HTTP/1.1" Umleitungsport="8443"/> Ändern Sie diese Zeile in <!--Lösen Sie das Problem der verstümmelten chinesischen Zeichen in der Adressleiste, indem Sie useBodyEncodingForURI="true" URIEncoding="UTF-8" in <Connector --> hinzufügen. <!--useBodyEncodingForURI="true": bedeutet, dass Get- und Post-Anfragen die gleiche Kodierung verwenden --> <!--URIEncoding="UTF-8": Anforderungskodierung ist UTF-8 --> <Connector URIEncoding="UTF-8" Verbindungs-Timeout="20000" Port="8080" Protokoll="HTTP/1.1" Umleitungs-Port="8443" useBodyEncodingForURI="true"/> Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: So ändern Sie die Länge eines Eingabetextfelds entsprechend seinem Inhalt
>>: Tomcat8 verwendet Cronolog zum Aufteilen von Catalina.Out-Protokollen
Vorwort Der Befehl mv ist die Abkürzung für move ...
Das sogenannte Verbindungslimit in Nginx ist tats...
1. Installieren Sie vue-cli npm ich @vue/cli -g 2...
Was ist ZooKeeper ZooKeeper ist ein Top-Level-Pro...
Dieser Artikel stellt ein möglichst einfaches Fra...
Was sind die Lebenszyklusfunktionen von React-Kom...
Dieser Artikel beschreibt anhand eines Beispiels ...
CI/CD-Übersicht CI-Workflow-Design Das Git-Codeve...
Laden Sie die neueste Version von MySQL für Ubunt...
1. Herunterladen 1. Laden Sie das Installationspa...
Inhaltsverzeichnis 1. Einführung in Nginx 2. Aufb...
Inhaltsverzeichnis Vorwort Die Rolle des Schlüsse...
Inhaltsverzeichnis Vorwort Anruf Verwendung errei...
Nginx (Engine x) ist ein leistungsstarker HTTP- u...
1. Einleitung Im Projekt wird MySQL verwendet. Ic...