Vue + SSM realisiert den Vorschaueffekt beim Hochladen von Bildern

Vue + SSM realisiert den Vorschaueffekt beim Hochladen von Bildern

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
<Context path="/FileDir" docBase="G:\Installationspaket\Tomcat\Installationspaket\Tomcat 7.0\FileDir"/>

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.
Ich habe über den Grund für die verstümmelten Zeichen nachgedacht. Da meine Bildressourcen durch Zugriff auf Tomcat abgerufen wurden, war die Übermittlungsmethode eine Get-Anforderung, als das IMG-Tag dynamisch an den vom Hintergrund übergebenen Pfad gebunden war. Der von der Rezeption erhaltene chinesische Pfad ist korrekt, wird jedoch unter Tomcat verstümmelt. Die Standardcodierungsmethode von Tomcat für die chinesische Codierung ist iso8859-1, und die vom Frontend festgelegte Codierungsmethode ist utf-8, sodass verstümmelte Zeichen auftreten.

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:
  • Implementierungsbeispiel für den Bildupload mit Vue+Element+Springboot
  • Vue+axios-Beispielcode zum Hochladen von Bildern und Erkennen von Gesichtern
  • Beim Hochladen von Bildern mit Axios in Vue sind Probleme aufgetreten
  • Der Vue.js-Cloud-Speicher realisiert die Bild-Upload-Funktion
  • Öffentlicher Upload-Bereich für mehrere Typen von Anhangsbildern auf der Vue-Seite und anwendbares Faltfenster (Beispielcode)

<<:  So ändern Sie die Länge eines Eingabetextfelds entsprechend seinem Inhalt

>>:  Tomcat8 verwendet Cronolog zum Aufteilen von Catalina.Out-Protokollen

Artikel empfehlen

Erweiterte Verwendungsbeispiele für den Befehl mv in Linux

Vorwort Der Befehl mv ist die Abkürzung für move ...

vue-cli4.5.x erstellt schnell ein Projekt

1. Installieren Sie vue-cli npm ich @vue/cli -g 2...

Beispielcode für HTML-Framesets

Dieser Artikel stellt ein möglichst einfaches Fra...

Eine kurze Diskussion über die Lebenszyklusfunktionen von React Component

Was sind die Lebenszyklusfunktionen von React-Kom...

Beispielanalyse der Verwendung von GROUP_CONCAT in MySQL

Dieser Artikel beschreibt anhand eines Beispiels ...

Docker Gitlab+Jenkins+Harbor erstellt einen persistenten Plattformbetrieb

CI/CD-Übersicht CI-Workflow-Design Das Git-Codeve...

Implementierung der Nginx-Konfiguration des lokalen Image-Servers

Inhaltsverzeichnis 1. Einführung in Nginx 2. Aufb...

So starten und starten Sie nginx unter Linux neu

Nginx (Engine x) ist ein leistungsstarker HTTP- u...