So handhaben Sie Bilder in Vue-Formularen

So handhaben Sie Bilder in Vue-Formularen

Frage:

Ich habe in Vue ein Formular zum Hochladen von Blogbeiträgen. Es bietet Bereiche für Titel, Text, Beschreibung, Snippet und Bild. Alles ist notwendig. Ich habe in Express eine API eingerichtet, um dies zu handhaben. Ich habe es in Postman getestet und es hat gut funktioniert, aber ich weiß nicht, wie ich die Datei über den Browser an die Datenbank senden kann. Ich erhalte ständig einen 500-Fehler und drucke die Daten auf der Konsole aus. Das Bildfeld ist leer. Ich bin also sicher, dass das das Problem ist, kann aber einfach nicht herausfinden, was es ist.

Dies ist die Form meiner Front-End-Seite:

<Vorlage>
 <div Klasse="Container">
  <div id="nav">
   <Administratornavigation/>
  </div>
  <div id="erstellen">
   <h1>Neuen Beitrag erstellen</h1>
  </div>
  <div id="Beitrag">
   <Text>
    <form>
     <label for="title">Titel: </label>
     <textarea v-model=formdata.title Zeilen="5" Spalten="60" Name="Titel"
      Platzhalter="Text eingeben">
     </textarea>
     <br/>
     <label for="body">Textkörper: </label>
     <textarea v-model=formdata.body Zeilen="5" Spalten="60" Name="body"
      Platzhalter="Text eingeben">
     </textarea>
     <br/>
     <label for="description">Beschreibung: </label>
     <textarea v-model=formdata.description Zeilen="5" Spalten="60" Name="Beschreibung"
      Platzhalter="Text eingeben">
     </textarea>
     <br/>
     <label for="snippet">Ausschnitt: </label>
     <textarea v-model=formdata.snippet Zeilen="5" Spalten="60" Name="snippet"
      Platzhalter="Text eingeben">
     </textarea>
     <br/>
     <label for="file">Foto hochladen: </label>
     <Eingabe
      Klasse="Formular-Steuerdatei"
      Typ="Datei"
      akzeptieren="image/*"
      v-bind="formdata.photo"
     />
     <br/>
     <input id="senden" type="senden" value="senden" @click.prevent="createPost()"/>
    </form>
   </body>
  </div>
 </div>
</Vorlage>

<Skript>
importiere Adminnav aus „../components/adminnav.vue“;
importiere PostService aus „../service/PostService“;

Standard exportieren {
 Name: "createStory",
 Komponenten:
  Administratornavigation,
 },
 Daten() {
  zurückkehren {
   Formdaten: {
    Titel: '',
    Körper: '',
    Beschreibung: '',
    Ausschnitt: '',
    Foto: null,
   },
  };
 },
 Methoden: {
  Beitrag erstellen() {
   Konsole.log(diese.Formdaten);
   /* eslint bevorzugt Destrukturierung: 0 */
   const formdata = diese.formdata;
   PostService.createPost(Formulardaten)
    .then(() => {
     console.log('Erfolg');
    });
  },
 },
};
</Skript>

Dies ist eine POST-Anfrage.

router.post("/add-story", upload.single('Foto'), async(req, res) => {
 versuchen{
  let post = neuer Beitrag();
  Beitragstitel = erforderlicher Textkörpertitel;
  Beitragsbeschreibung = erforderliche Textkörperbeschreibung;
  post.photo = erforderlicher.Dateispeicherort;
  post.body = erforderlich.body.body;
  Beitrag.Snippet = erforderlich.Body.Snippet;

  warte auf post.save();

  res.json({
   Status: wahr,
   Meldung: „Erfolgreich gespeichert.“
  });

 } Fang(Fehler) {
  res.status(500).json({
   Erfolg: falsch,
   Nachricht: Fehlernachricht
  });
 }
});

Problemumgehung

Lassen Sie uns das change der Datei <input> überwachen. Dadurch wird sichergestellt, dass jedes Upload-Verhalten des Benutzers updatePhoto auslöst und die Dateidaten in this.photo speichert.

<Eingabetyp="Datei" akzeptieren="Bild/*" Klasse="Formular-Steuerungsdatei"
  @change="updatePhoto($event.target.name, $event.target.files)"
>

Code zum Sammeln aller Daten und Senden der Anfrage

// Der Rest der Vue-Komponente data () {
  zurückkehren {
    Titel: '',
    Körper: '',
    Beschreibung: '',
    Ausschnitt: '',
    Foto: {} //Dateidaten speichern};
},
Methoden: {
  updatePhoto (Dateien) {
    wenn (!Dateien.Länge) return;

    //Dateidaten speichern this.photo = {
      Name: Dateien[0].Name,
      Daten: Dateien[0]
    };
  },
  Beitrag erstellen() {
    let formData = neue FormData();

    formData.append('Titel', dieser.Titel);
    formData.append('body', dieser.body);
    formData.append('Beschreibung', diese.Beschreibung);
    formData.append('snippet', dieses.snippet);
    formData.append('Foto', dieses.Foto.Daten, dieser.Foto.Name);

    PostService.createPost(Formulardaten)
    .then(() => {
      console.log('Erfolg');
    });
  }
}
// Der Rest der Vue-Komponente

Offensichtlich habe ich viele Dinge übersprungen, wie die gesamte Vue-Komponentenstruktur, die für diese Frage sicher irrelevant ist, und einige Prüfungen, um sicherzustellen, dass die Dateidaten verfügbar sind, bevor die Anfrage usw. gestartet wird. Dies ist eine Idee, wie Sie an die Dateidaten gelangen. Hoffentlich kann diese Antwort Sie inspirieren.

Oben finden Sie Einzelheiten zur Verarbeitung von Bildern in Vue-Formularen. Weitere Informationen zur Verarbeitung von Bildern in Vue-Formularen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Vue+elementUI implementiert ein Beispiel für eine Formular- und Bild-Upload- und Überprüfungsfunktion
  • Beispiel für die Übermittlung eines Vue Axios-Formulars zum Hochladen von Bildern
  • Verwenden Sie Vue, um ein Formular zum Hochladen von Bildern zu erstellen

<<:  Was tun, wenn Sie das ursprüngliche Passwort für MySQL auf dem MAC vergessen?

>>:  Lernen Sie MySQL auf einfache Weise

Artikel empfehlen

Gestaltung von Popup-Fenstern und schwebenden Ebenen im Webdesign

Im Zuge des schrittweisen Übergangs von herkömmli...

Methode der Toolbibliothek zur Generierung von Vue-Komponentendokumenten

Inhaltsverzeichnis Analysieren von VUE-Dateien Do...

Zusammenfassung der 10 gängigen HBase-Betriebs- und Wartungstools

Zusammenfassung: HBase verfügt über zahlreiche Be...

Zusammenfassung wichtiger MySQL-Protokolldateien

Autor: Ding Yi Quelle: https://chengxuzhixin.com/...

JS realisiert den Effekt des Bildwasserfallflusses

In diesem Artikel wird der spezifische JS-Code zu...

Verbesserung der Wirkung von Hyperlinks im Webdesign und in der Produktion

Hyperlinks ermöglichen es Benutzern, sofort von ei...

Docker verwendet Root, um in den Container zu gelangen

Führen Sie zuerst den Docker-Container aus Führen...

So laden Sie Projekte im Linux-System in die Code Cloud hoch

Erstellen Sie ein neues Projekt test1 auf Code Cl...

Häufige Probleme und Lösungen beim Erstellen von MySQL MGR

Inhaltsverzeichnis 01 Häufige Fehler 1 02 Häufige...