Erstellen Sie eine neue server.js Garn init -y Garn hinzufügen Express Nodemon -D var express = erfordern("express"); const fs = erfordern("fs"); var Pfad = erforderlich("Pfad"); const multer = require("multer"); //Pfad angeben var app = express(); app.use(express.json()); app.use(express.urlencoded({ erweitert: true })); // Front-End löst domänenübergreifende Probleme app.all("*", (req, res, next) => { res.header("Zugriffskontrolle-Origin zulassen", "*"); nächste(); }); // Auf statische Ressourcen zugreifen app.use(express.static(path.join(__dirname))); // Datei hochladen app.post("/upload", multer({ dest: "./public" }).any(), (req, res) => { const { Feldname, Originalname } = req.files[0]; // Neuen Pfad erstellen const name = fieldname.slice(0, fieldname.indexOf(".")); const neuerName = "public/" + name + path.parse(originalname).ext; fs.rename(req.files[0].Pfad, neuerName, Funktion (err) { wenn (Fehler) { res.send({ code: 0, msg: "Upload fehlgeschlagen", data: [] }); } anders { res.send({ code: 1, msg: "Upload erfolgreich", data: newName }); } }); }); // Datei herunterladen app.get('/download', function(req, res) { res.download('./public/test.xls'); }); // Bild herunterladen app.get('/download/img', function(req, res) { res.download('./public/2.jpg'); }); lass Port = 9527; app.listen(port, () => console.log(`Port gestartet: http://localhost:${port}`)); (1): Frontend-Dateiupload-Anforderung Der erste Typ: Formular <form action="http://localhost:9527/upload" method="POST" encType="multipart/form-data"> <input type="file" name="user"/> <Eingabetyp="Senden" /> </form> Der erste Typ: Eingabefeld <Eingabetyp="Datei" @change="changeHandler($event)"/> changeHandler(Ereignis) { let Dateien = Ereignis.Ziel.Dateien[0]; console.log("Dateien",Dateien) let data = neue FormData(); data.append(Dateien.Name,Dateien); console.log("Daten",Daten) axios.post("http://localhost:9527/upload",Daten,{ Überschriften:{ "Inhaltstyp": "multipart/Formulardaten" } }).dann(res =>{ konsole.log("res",res) }) }, (2): Frontend-Dateidownload Die erste Methode: Das Backend gibt eine Download-Link-Adresse zurück, die das Frontend direkt verwenden kann <input type="button" value="Zum Herunterladen klicken" @click="handleDownload"> handleDownload() { axios({ Methode: 'get', URL: "http://localhost:9527/download", Daten: { test: "Testdaten" }, responseType: "arraybuffer" // arraybuffer ist eine Schnittstelle zur Verarbeitung von Binärdaten in js}).then(response => { // Erstellen Sie eine Blob-Instanz mit den zurückgegebenen Binärdaten if(!response) return; let blob = neuer Blob([Antwort.Daten], { Typ: „application/vnd.openxmlformats-officedocument.spreadsheetml.sheet“, }) // für .xlsx-Dateien // Dateipfad über URL.createObjectURL generieren let url = window.URL.createObjectURL(blob) Konsole.log("url==========",URL) // Ein Tag erstellen let ele = document.createElement("a") ele.style.display = "keine" // Setze das href-Attribut auf den Dateipfad und das Download-Attribut auf den Dateinamen ele.href = url ele.download = dieser.name // Füge der Seite das a-Tag hinzu und simuliere einen Klick document.querySelectorAll("body")[0].appendChild(ele) ele.klick() // Entferne das A-Tag ele.remove() }); }, (3) Zusätzlich: Herunterladen von binären Stream-Bildern // Binäre Stream-Bilddatei herunterladen downLoadImg() { axios({ Methode: 'get', URL: `http://localhost:9527/download/img`, Antworttyp: "Array-Puffer", Parameter: { ID: 12 } }).dann(res => { var src = "data:image/jpg;base64," + btoa(neues Uint8Array(res.data).reduce((data, byte) => data + String.fromCharCode(byte), '')) // this.srcImg = src // Bildanzeige var a = document.createElement('a') a.href = src a.download = "2.jpg" ein.Klick() a.entfernen() }) } Damit ist dieser Artikel über die Front-End-Vue+Express-Implementierung von Beispielen zum Hoch- und Herunterladen von Dateien abgeschlossen. Weitere verwandte Inhalte zum Hoch- und Herunterladen von Dateien mit Vue Express finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erklärung des Unterschieds zwischen Cellspacing und Cellpadding in der Tabelle
>>: Einführung in die Leistungsoptimierung von MySQL-Datenbanken
Vue-Gerüst -> vue.cli Erstellen Sie schnell ei...
Oftmals werden Sie auf einen <a>-Tag-Stil st...
my.cnf ist die Konfigurationsdatei, die beim Star...
Ich habe vor langer Zeit eine virtuelle Maschine ...
1. Namenskonventionen 1. Datenbanknamen, Tabellen...
Inhaltsverzeichnis 1. Nutzen Sie Slots, um Kompon...
Vorwort Mit der Entwicklung großer Frontends tauc...
Wenn Sie zur Implementierung eines Kontrollkästch...
Dieser Artikel beschreibt anhand eines Beispiels ...
Problembeschreibung: Ich habe einen Mac gekauft u...
Inhaltsverzeichnis Vorwort Einschränkungen prüfen...
Vor einiger Zeit habe ich Testern eine Produktver...
Inhaltsverzeichnis Demo1 Fragment erstellen Svelt...
Drag & Drop ist eine gängige Funktion im Fron...
Das Datenwörterbuch in MySQL ist eine der wichtig...