Vue implementiert Funktionen zum Hoch- und Herunterladen von Dateien

Vue implementiert Funktionen zum Hoch- und Herunterladen von Dateien

In diesem Artikelbeispiel wird der spezifische Code von Vue zur Implementierung von Datei-Upload- und Download-Funktionen zu Ihrer Information geteilt. Der spezifische Inhalt ist wie folgt

1. ein Tag-Download-Attribut

In H5 wird dem A-Tag ein Download-Attribut hinzugefügt, um die Datei direkt herunterzuladen, und der Dateiname ist der Dateiname des Download-Attributs.

  • Das Download-Attribut unterstützt derzeit nur Google Chrome und Mozilla Firefox. Andere Browser unterstützen dieses Attribut nicht.
  • „Download“ ist ein neues Attribut in H5. H5 hatte dieses Attribut vorher nicht.

2. URL.createObjectURL

Die Methode URL.createObjectURL() erstellt eine URL, die auf das Parameterobjekt basierend auf den übergebenen Parametern verweist. Diese URL existiert nur in dem Dokument, in dem sie erstellt wird. Die neue Objekt-URL verweist auf das ausgeführte Dateiobjekt oder Blob-Objekt.

Ein File-Objekt ist eine Datei. Wenn ich beispielsweise zum Hochladen von Dateien den Tag input type="file" verwende, ist jede darin enthaltene Datei ein File-Objekt.

Blob-Objekte sind binäre Daten. Beispielsweise ist das von new Blob() erstellte Objekt ein Blob-Objekt. Wenn beispielsweise in XMLHttpRequest der responseType als blob angegeben ist, ist der Rückgabewert ebenfalls ein Blob-Objekt.

let URL = Fenster.URL || Fenster.webkitURL;
let downloadUrl = URL.createObjectURL(blob || Datei);

3. URL.revokeObjectURL

Die Methode URL.revokeObjectURL() gibt eine von URL.createObjectURL() erstellte Objekt-URL frei. Wenn das Objekt nicht mehr benötigt wird, muss es freigegeben werden. Nach der Freigabe verweist die Objekt-URL nicht mehr auf die angegebene Datei.

downloadUrl && URL.revokeObjectURL(downloadUrl);

4. Dateien mit Vue.js hochladen und herunterladen

<Vorlage>
    <div Klasse="btn-box">
        <h3>Dateiupload:</h3>
        <input Klasse="file-input" Typ="Datei" @change="getFile($event)" />
        <el-button type="primary" @click="upload">Datei hochladen (POST)</el-button>
        <h3>Dateidownload:</h3>
        <el-button type="primary" @click="downloadLink">Laden Sie die verknüpfte Datei herunter (window.open)</el-button>
        <el-button type="primary" @click="downloadBlobByGet">Binärer Stream-Download (GET)</el-button>
        <el-button type="primary" @click="downloadBlobByPost">Binärer Stream-Download (POST)</el-button>
    </div>
</Vorlage>
 
<Skript>
    Axios von „Axios“ importieren
    Standard exportieren {
        Name: "attendPoint",
        Daten() {
            zurückkehren {,
                Datei: null,
                Dateiname: "test.xlsx"
            }
        },
        Methoden: {
            // Datei auswählen getFile(event) {
                diese.Datei = Ereignis.Ziel.Dateien[0];
            },
 
            // Datei hochladen (POST)
            hochladen() {
                let url = "http://localhost:3000/upload/test";
                let formData = neue FormData();
                formData.append("name", "zhangsan");
                formData.append("Alter", "18");
                formData.append("Datei", diese.Datei);
                let konfiguration = {
                    Überschriften: {
                        "Inhaltstyp": "multipart/Formulardaten"
                    }
                }
                axios.post(url, formData, config).then((res) => {
                    dieser.Dateiname = res.data.downloadUrl;
                    this.$message.success("Upload erfolgreich!");
                }).catch(() => {
                    this.$message.error("Bitte laden Sie zuerst die Datei hoch!");
                })
            },
 
            // Lade die Datei mit dem Link herunter (window.open)
            downloadLink() {
                wenn (dieser.Dateiname) {
                    Fenster.öffnen("http://localhost:3000/download/test?fileName=" + dieser.fileName);
                }
            },
 
            //Binärer Stream herunterladen (GET)
            asynchroner Download von BlobByGet() {
                let urlGet = "http://localhost:3000/download/test?fileName=" + dieser.fileName;
                Lassen Sie fileData = await axios.get(urlGet, { responseType: "blob" });
                let URL = Fenster.URL || Fenster.webkitURL;
                let downloadUrl = URL.createObjectURL(fileData.data);
                sei a = document.createElement("a");
                a.href = Download-URL;
                a.download = this.fileName; //Dateiname nach dem Download a.click();
                a = null;
                downloadUrl && URL.revokeObjectURL(downloadUrl);
            },
 
            //Binärer Stream-Download (POST)
            asynchroner Download von BlobByPost() {
                let urlPost = "http://localhost:3000/download/post/test";
                lass fileData = warte auf axios({
                    Methode: "post",
                    url: urlPost, // Anfrageadresse data: { fileName: this.fileName }, // Parameter responseType: "blob" // gibt den vom Server zurückgegebenen Datentyp an })
                let URL = Fenster.URL || Fenster.webkitURL;
                let downloadUrl = URL.createObjectURL(fileData.data);
                sei a = document.createElement("a");
                a.download = dieser.Dateiname;
                a.href = Download-URL;
                ein.Klick();
                a = null;
                downloadUrl && URL.revokeObjectURL(downloadUrl);
            },
        },
    }
</Skript>
 
<Stilbereich>
    .btn-box {
        Polsterung: 20px;
    }
    .el-Schaltfläche,
    Eingabe {
        maximale Breite: Inhalt anpassen;
        Anzeige: Block;
        Rand: 20px;
    }
</Stil>

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:
  • Vue implementiert das Hoch- und Herunterladen von Dateien
  • Springboot+vue zum Realisieren des Hoch- und Herunterladens von Dateien
  • Vue Excel-Upload-Vorschau und Tabelleninhalt-Download in Excel-Datei
  • Springboot integriert Vue zum Hoch- und Herunterladen von Dateien
  • Vue implementiert Funktionen zum Hochladen, Lesen und Herunterladen von Dateien
  • Zwei Möglichkeiten zum Implementieren von Excel-Dateiupload- und -downloadfunktionen in Vue
  • vue-cli+axios realisiert die Funktion zum Hoch- und Herunterladen von Dateien (der Download-Empfangshintergrund gibt den Dateistream zurück)

<<:  Detaillierte Erklärung der Verwendung und Funktion des MySQL-Cursors

>>:  Tutorial zur Installation und Konfiguration der Centos7-MySQL-Datenbank

Artikel empfehlen

Beispiel zum Ändern von Stilen über CSS-Variablen

Frage Wie ändere ich den CSS-Pseudoklassenstil mi...

js implementiert das Umschalten von Bildern per Maus (ohne Timer)

In diesem Artikelbeispiel wird der spezifische Co...

mysql5.6.zip-Format komprimierte Version Installations-Grafik-Tutorial

Vorwort: MySQL ist ein relationales Datenbankverw...

Häufige Verwendung von Hooks in React

Inhaltsverzeichnis 1. Was ist ein Hook? 2. Warum ...

Navicat-Remoteverbindung zur MySQL-Implementierungsschritteanalyse

Vorwort Ich glaube, dass jeder auf einem Remote-S...

Detailliertes Installationstutorial für Zabbix 4.04 (basierend auf CentOS 7.6)

1. Vorbereitung vor der Installation: 1.1 JDK ins...

Lösung für den Fehler 2059 beim Verbinden von Navicat mit MySQL

Als ich kürzlich Django lernte, musste ich eine D...

So zeigen Sie in CocosCreator eine Textur an der Wischposition an

Inhaltsverzeichnis 1. Projektanforderungen 2. Dok...

Detaillierte Erläuterung der Vue-Lebenszyklusfunktionen

Inhaltsverzeichnis Lebenszyklusfunktionen Allgeme...

Tutorial zum Erstellen eines SVN-Servers mit Docker

SVN ist die Abkürzung für Subversion, ein Open-So...

Abrufen der Erstellungszeit einer Datei unter Linux und ein praktisches Tutorial

Hintergrund Manchmal müssen wir den Erstellungsze...

Der Unterschied zwischen KEY, PRIMARY KEY, UNIQUE KEY und INDEX in MySQL

Das im Titel angesprochene Problem lässt sich sch...