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. NachfragehintergrundKü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) 3. Konkrete UmsetzungHier 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-Code1. 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. //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. 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:
|
>>: Lösen Sie das Problem, dass Docker das MySQL-Image zu langsam zieht
Verwenden Sie „blockquote“ für lange Zitate, „q“ ...
Ich habe heute MySQL 8.0 aktualisiert. Das erste ...
1. Manchmal verwenden wir ES Aufgrund begrenzter ...
Inhaltsverzeichnis Hintergrund Hauptinhalt 1. Kom...
Inhaltsverzeichnis Vorwort 1. Rekursive Komponent...
erster Schritt Einmaliges Löschen mit der integri...
Beim Erstellen eines DIV+CSS-Layouts einer Seite ...
Vorwort Die Ähnlichkeiten und Unterschiede zwisch...
Betriebssystem: Win7 64-Bit Ultimate Edition Komp...
In diesem Artikel wird hauptsächlich erläutert, w...
MySQL zwischen Grenzbereich Der Bereich zwischen ...
Inhaltsverzeichnis MySQL-Ergebnissortierung - Agg...
Vmware-Installation Pakete installieren Download-...
Inhaltsverzeichnis Vorwort 1. Monadisches Urteil ...
Docker erfreut sich immer größerer Beliebtheit. E...