Vue+Element+Springboot zum Implementieren eines Beispiels für die Anzeigefunktion des Fortschrittsbalkens beim Dateidownload

Vue+Element+Springboot zum Implementieren eines Beispiels für die Anzeigefunktion des Fortschrittsbalkens beim Dateidownload

In diesem Artikel wird hauptsächlich das Beispiel von vue + element + springboot vorgestellt, um die Funktion zur Anzeige des Fortschrittsbalkens beim Herunterladen von Dateien zu realisieren, und es wird mit Ihnen geteilt. Die Details sind wie folgt

Endgültiges Rendering

1. Nachfragehintergrund

Kürzlich erhielten wir eine Optimierungsanfrage. Die ursprüngliche Datei-Download-Funktion des Systems war nicht benutzerfreundlich, insbesondere beim Herunterladen einiger zeitaufwändiger Dateien. Benutzer warteten auf der Seite, ohne den Download-Fortschritt zu kennen, und dachten immer, das System sei hängengeblieben.

2. Optimierungsplan

Optimieren Sie die Downloadgeschwindigkeit im Hintergrund (Sie können fragmentierte Downloads untersuchen, aber ich werde hier nicht näher darauf eingehen)
Verbessern Sie die Benutzererfahrung im Front-End (Sie müssen beispielsweise nach dem Klicken auf „Herunterladen“ den Fortschritt anzeigen, um den Kunden darüber zu informieren, dass der Download ausgeführt wird).

3. Konkrete Umsetzung

Hier wählen wir die Lösung in 2.2, um das Front-End-Benutzererlebnis zu verändern. Der Zweck dieses Artikels besteht darin, den damaligen Lösungsprozess aufzuzeichnen, in der Hoffnung, allen zu helfen; der technische Hintergrund der in diesem Artikel verwendeten Lösung: Front-End Vue + Element-UI, Back-End: Springboot-Front-End und Back-End-Trennung, ohne weiteres direkt im Code;

3.1 Front-End-Code

1. Definieren Sie eine Popup-Ebene (der Stil kann nach Ihren eigenen Vorlieben bestimmt werden)

<!--Download-Fortschrittsbalken-->
    <el-dialog title="Wird heruntergeladen, bitte warten" :visible.sync="fileDown.loadDialogStatus" :close-on-click-modal="false" 
      :schließen beim Drücken von Escape="false" :anzeigen-schließen="false" width="20%">
      <div Stil="Textausrichtung: Mitte;">
        <el-progress Typ="Kreis" :percentage="fileDown.percentage"></el-progress>
      </div>
      <div slot="Fußzeile" class="dialog-footer">
        <el-button type="primary" @click="downClose">Download abbrechen</el-button>
      </div>  
    </el-dialog>

Definieren Sie ein Objekt in data()

DateiDown: {
        loadDialogStatus: false, // Prozentsatz des Steuerelementstatus des Popup-Fensters: 0, // Prozentsatz der Fortschrittsanzeige, Quelle: {}, // Download des Ressourcenobjekts abbrechen },

3. Hauptmethode (Beachten Sie, dass die folgenden Parameter ersetzt werden müssen: Hintergrundadresse, Dateiname usw.)

downFile(Zeile) {
    //Parameter hier einfügen var param = {};
    this.fileDown.loadDialogStatus = true;
    this.fileDown.percentage = 0;
    const Instanz = this.initInstance();
    Beispiel({
        Methode: "post",
        mit Anmeldeinformationen: true,
        url: "Downloadadresse ersetzen",
        Parameter: Parameter,
        Antworttyp: „Blob“
    }).dann(res => {
        this.fileDown.loadDialogStatus = falsch;
        konsole.info(res);
        const Inhalt = res.data;
        wenn (Inhaltsgröße == 0) {
          dies.loadClose();
          this.$alert("Download fehlgeschlagen");
          zurückkehren ;
        }
        const blob = neuer Blob([Inhalt]);
        const fileName = row.fileName; //Ersetze den Dateinamen if ("download" in document.createElement("a")) {
          // Nicht-IE-Download const elink = document.createElement("a");
          elink.download = Dateiname;
          elink.style.display = "keine";
          elink.href = URL.createObjectURL(blob);
          Dokument.Body.AnhängenUntergeordnetesElement(elink);
          elink.klick();
          setzeTimeout(Funktion() {
            URL.revokeObjectURL(elink.href); // URL-Objekt freigeben document.body.removeChild(elink);
          }, 100);
        } anders {
          // IE10+ herunterladen navigator.msSaveBlob(blob, fileName);
        }
      }).fangen(Fehler => {
          this.fileDown.loadDialogStatus = falsch;
          konsole.info(Fehler);
      });
  },
initInstance() {
      var _this = dies;
      //Ressourcentoken für Stornierung this.fileDown.source = axios.CancelToken.source();
      const instance = axios.create({ //Das Axios-Objekt sollte vorab importiert oder durch Ihr global definiertes onDownloadProgress ersetzt werden: function(ProgressEvent) {
          const load = ProgressEvent.loaded;
          const total = Fortschrittsereignis.total;
          const Fortschritt = (Last / Gesamt) * 100;
          console.log('Fortschritt='+Fortschritt);
          // Die Berechnung wurde bereits am Anfang durchgeführt. Dies muss die vorherige Berechnung überschreiten, um fortzufahren, wenn (Fortschritt > _this.fileDown.percentage) {
            _this.fileDown.percentage = Math.floor(Fortschritt);
          }
          wenn(Fortschritt == 100){
            //Download abgeschlossen_diese.DateiDown.loadDialogStatus = false;
          }
        },
        cancelToken: this.fileDown.source.token, //Deklariert ein Token für die Abbruchanforderung
      });
      Instanz zurückgeben;
    },
    runterSchließen() {
      //Download unterbrechen this.$confirm("Wenn Sie auf Schließen klicken, wird der Download unterbrochen. Möchten Sie ihn wirklich schließen?", this.$t("button.tip"), {
        Bestätigungsschaltflächentext: this.$t("button.confirm"),
        cancelButtonText: dies.$t("button.cancel"),
        Typ: „Warnung“
      }).then(() => {
          //Download-Rückruf unterbrechen this.fileDown.source.cancel('log==Kunde hat Download manuell abgebrochen');
      }).catch(() => {
          //Abbrechen – nichts tun});      
    },

3.2 Hintergrundcode

Der Hauptzweck des Hintergrunds besteht darin, die berechnete Dateigröße zurückzugeben. Andernfalls beträgt die Gesamtsumme, die beim Berechnen des Fortschritts durch das Front-End ermittelt wird, immer 0, was eine versteckte Falle darstellt.
Schlüsselcode: (Es gibt viele Möglichkeiten, den vollständigen Hintergrund im Internet herunterzuladen. Hier sind nur die wichtigsten Punkte und Punkte, die beachtet werden müssen.)

//Lokale Datei abrufen und Größe berechnen. Datei: file = new File(zipFileName);//Komprimierte Datei lesen. InputStream: inputStream = new File. InputStream(file);
int totalSize = inputStream.available(); //Dateigröße abrufen logger.info("Nach der Komprimierung === aktuelle Downloadgröße der Datei size={}", totalSize);
response.setHeader("Content-Length", totalSize+""); //Beachten Sie, dass Sie die setHeader-Eigenschaft vor response.getOutputStream() festlegen müssen, da sie sonst nicht wirksam wird. OutputStream out = response.getOutputStream();
Nachfolgende Auslassungen...

4. Fazit

Bei der Verwendung kann ein weiteres Problem auftreten: Das Berechnen der Dateigröße im Backend dauert sehr lange, sodass der Fortschrittsbalken im Frontend lange Zeit bewegungslos bleibt und die Benutzer das Gefühl haben, festzustecken. Dies entspricht nicht unseren Anforderungen.

Meine Lösung besteht hier darin, einen Timer auf dem Frontend zu erstellen. Wenn Sie auf „Herunterladen“ klicken, wird zuerst der Timer ausgeführt, der beispielsweise den Fortschritt in 2 Sekunden um 1 % erhöht. Wenn die Gesamtdateigröße vom Hintergrund zurückgegeben wird und der berechnete Prozentsatz (Prozentsatz) den Prozentsatz (Prozentsatz) des Timers überschreitet, schalten Sie den Timer aus und ersetzen Sie das Attribut (Prozentsatz) durch den Fortschrittsprozentsatz. Denken Sie daran, dass es eine Obergrenze für die automatische prozentuale Erhöhung (Prozentsatz) dieses Timers geben muss.
Der Vorteil besteht darin, dass das Frontend reagiert, wenn der Benutzer auf die Download-Schaltfläche klickt. Obwohl die vorherige Antwort möglicherweise falsch ist, spielt es keine Rolle, ob sie wahr oder falsch ist, solange die Verbindung gut ist.

Dies ist das Ende dieses Artikels über vue+element+springboot, um ein Beispiel für eine Anzeigefunktion für den Fortschrittsbalken beim Herunterladen von Dateien zu implementieren. Weitere verwandte Inhalte zum Fortschrittsbalken beim Herunterladen von Element Springboot finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So implementieren Sie einen in Echtzeit aktualisierten Fortschrittsbalken in SpringBoot
  • Vollständiges Beispiel der Springboot-Uploadfunktion mit Fortschrittsbalken

<<:  6 ungewöhnliche HTML-Tags

>>:  Lösen Sie das Problem, dass Docker das MySQL-Image zu langsam zieht

Artikel empfehlen

Einige wichtige Punkte des visuellen Website-Designs

Vom Kunsthandwerksdesign über Grafikdesign bis hin...

Die v-for-Direktive in Vue vervollständigt die Listendarstellung

Inhaltsverzeichnis 1. Listendurchlauf 2. Die Roll...

Lösung für Tomcat zum externen Speichern von Konfigurationsdateien

Frage Wenn wir bei der normalen Entwicklung das P...

So zeigen Sie Linux-SSH-Dienstinformationen und den Ausführungsstatus an

Es gibt viele Artikel zur SSH-Serverkonfiguration...

Benutzerdefiniertes Auswahlfeld für die Webseite Auswählen

Jeder ist wahrscheinlich mit dem Auswahl-Dropdown...

element-ui Markieren Sie die Koordinatenpunkte nach dem Hochladen des Bildes

Was ist Element-UI element-ui ist eine auf Vue.js...