Im vorherigen Artikel habe ich die Funktion von Vue zum Herunterladen von Dateien per Mausklick vorgestellt. Heute werde ich das Thema „Vue zum Herunterladen von Dateien per Mausklick“ fortsetzen. Im aktuellen Projekt muss die Anforderung umgesetzt werden, dass zum Herunterladen von Dateien auf eine Schaltfläche geklickt werden muss. Vue wird auf dem Frontend verwendet, da die Dateien unterschiedlicher Art sind, z. B. Bilder, PDF, Word usw. Hier kann das Backend die Adresse der Datei an das Frontend zurückgeben, aber nachdem ich mir im Internet verschiedene Antworten angeschaut habe, habe ich das Gefühl, dass keine davon das ist, was ich möchte. Da wir nicht sicher sind, um welchen Typ es sich bei der Datei handelt, sollten wir den Inhaltstyp der Datei speichern, wenn wir sie in der Datenbank speichern. Auf diese Weise identifiziert der Inhaltstyp den Dateityp, wenn die Datei aus der Datenbank abgerufen und an das Front-End zurückgegeben wird, und das Front-End kann sie analysieren. 1. Backend-CodeHier werde ich zunächst die Schnittstelle zum Backend schreiben und mir überlegen, was das Backend braucht. Da die Dateiinformationen vorab in der Datenbank gespeichert wurden, müssen wir nur die Primärschlüssel-ID übergeben, um die Dateiinformationen zu erhalten. Nachdem Sie die Parameter bestimmt haben, müssen Sie den Rückgabewerttyp bestimmen. Zur Rückgabe kann hier ResponseEntity verwendet werden. ResponseEntity kann mehrere Informationen gleichzeitig zurückgeben, darunter Statuscode, Antwortheaderinformationen, Antwortinhalt usw. Schauen wir uns ohne weitere Umschweife den Code an. /** * Anhang herunterladen * @param attachmentId * @zurückkehren */ öffentliche ResponseEntity<byte[]> download(Lange Anhangs-ID) { // Prüfen, ob der Anhang vorhanden ist SysAttachment sysAttachment = sysAttachmentMapper.selectSysAttachmentById(attachmentId); wenn (StringUtils.isNull(sysAttachment)) { gibt null zurück; } ByteArrayOutputStream bos = null; InputStream ins = null; versuchen { Zeichenfolge Dateiname = sysAttachment.getOrgFileName(); Zeichenfolge ossFileName = sysAttachment.getUrl(); bos = neuer ByteArrayOutputStream(); ins = OssUtils.getInstance().getObject(ossFileName).getObjectContent(); // Daten aus dem Stream holen int len = 0; byte[] buf = neues byte[256]; während ((Länge = ins.read(buf, 0, 256)) > -1) { bos.write(buf, 0, länge); } // Verstümmelte chinesische Zeichen verhindern fileName = URLEncoder.encode(fileName, "utf-8"); // Antwortheader festlegen HttpHeaders headers = new HttpHeaders(); headers.add("Content-Disposition", "attachment;filename=" + Dateiname); headers.add("Inhaltstyp", sysAttachment.getContentType()); //Setzen Sie die Antwort HttpStatus statusCode = HttpStatus.OK; ResponseEntity<byte[]> Antwort = neue ResponseEntity<byte[]>(bos.toByteArray(), Header, Statuscode); Antwort zurückgeben; } Fang (Ausnahme e) { throw new CustomException("Download fehlgeschlagen"); Endlich versuchen { if (ins != null) { ins.schließen(); } wenn (bos != null) { bos.schließen(); } } Fang (Ausnahme e) { throw new CustomException("Download fehlgeschlagen"); } } } Hier nehmen wir die URL der Datei aus der Datenbank und erhalten dann den Eingabestream der Datei über Alibaba Cloud OSS. Dann geben wir die Datei als Binärdatei aus, kapseln sie in ResponseEntity und setzen den Dateityp auf Content-Type. Gleichzeitig setzen wir die UTF-8-Kodierung, um zu verhindern, dass der Dateiname verstümmelte chinesische Zeichen enthält. An diesem Punkt ist die Backend-Schnittstelle abgeschlossen. Basierend auf den obigen Informationen sollten wir beim Speichern von Dateiinformationen in der Datenbank mindestens die folgenden Felder speichern: die URL der Datei (normalerweise wird Ihnen diese nach dem Hochladen in OSS zugewiesen), den Dateityp, den ursprünglichen Dateinamen, die Dateigröße usw. 2. Frontend-CodeMit der Backend-Schnittstelle folgt im nächsten Schritt das Frontend. Hier können Sie die Methode zum Herunterladen von Dateien in eine allgemeine Methode kapseln, global einbinden und dann direkt dort verwenden, wo Sie sie benötigen. Wir müssen unterschiedliche Dateien identifizieren, also benötigen wir ein Schlüssel-Wert-Paar, um unterschiedliche Dateien darzustellen. const mimeMap = { xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", xls: 'anwendung/vnd.ms-excel', zip: "Anwendung/zip", jpg: 'bild/jpg', jpeg: "bild/jpeg", png: 'bild/png', doc: "Anwendung/msword", docx: „application/vnd.openxmlformats-officedocument.wordprocessingml.document“, ppt: "application/vnd.ms-powerpoint", txt: 'Text/Plain', pdf: 'Anwendung/pdf' } Sie können bei Bedarf weiterhin mehr hinzufügen. Der nächste Schritt besteht darin, eine Anfrage zu senden. Der Rückgabetyp kann hier auf Blob gesetzt und direkt mit Axios gesendet werden. /** * Anhang herunterladen* @param Pfad Schnittstellenadresse* @param Param Anforderungsparameter*/ Exportfunktion downloadAttachment(Pfad, Parameter) { var url = Basis-Url + Pfad + Param axios({ Methode: 'get', URL: URL, Antworttyp: "Blob", Header: { 'Autorisierung': getToken() } }).dann(res => { Blob auflösen(res, res.data.type) }) } Die Schnittstellenadresse und die Anforderungsparameter werden von außen übergeben. Zudem ist ein Token erforderlich, da es sonst zu domänenübergreifenden Zugriffen kommt. Nachdem Sie die vom Backend zurückgegebenen Daten erhalten haben, müssen Sie die Binärdatei analysieren. Hier definieren wir die Methode „resolveBlob“, die zwei Parameter hat: das Rückgabeobjekt und den Dateityp. Den Dateityp haben wir im Backend bereits in Content-Type eingefügt, also verwenden wir ihn einfach hier. /** * Inhalt der Blob-Antwort analysieren und herunterladen * @param {*} res Inhalt der Blob-Antwort * @param {String} mimeType MIME-Typ */ Exportfunktion resolveBlob(res, mimeType) { const aLink = document.createElement('a') var blob = neuer Blob([res.data], { Typ: MIME-Typ }) // Dateinamen aus den Antwortheadern und den vom Backend festgelegten Dateinamen abrufen response.setHeader("Content-disposition", "attachment; filename=xxxx.docx"); var patt = neuer RegExp('Dateiname=([^;]+\\.[^\\.;]+);*') var contentDisposition = decodeURI(res.header['content-disposition']) var Ergebnis = patt.exec(contentDisposition) var Dateiname = Ergebnis[1] Dateiname = Dateiname.replace(/\"/g, '') aLink.href = URL.ObjektURLerstellen(blob) aLink.setAttribute('download', fileName) // Den Download-Dateinamen festlegen document.body.appendChild(aLink) einLink.klick() Dokument.Body.RemoveChild(einLink); } Es ist nicht nötig, diesen Code im Detail zu erklären, die Front-End-Experten werden ihn natürlich verstehen. OK, hier sind die Front-End- und Back-End-Codes fertig. 3. NutzungDie Bedienung ist noch einfacher. Mounten Sie es zuerst global importiere { downloadAttachment } von "@/utils/download" Vue.prototype.downloadAttac = Anhang herunterladen Rufen Sie es einfach direkt dort auf, wo Sie es verwenden <el-Schaltfläche Typ="Text" Symbol="el-icon-herunterladen" Größe="mini" @click="downloadAttachRow(scope.row.attachmentId)" ></el-Schaltfläche> /** Anhang herunterladen */ downloadAttachRow(attachId) { this.$confirm('Sind Sie sicher, dass Sie die Datei herunterladen möchten?', "Warnung", { confirmButtonText: "Bestätigen", cancelButtonText: "Abbrechen", Typ: „Warnung“ }).then(() => { this.downloadAttac('/system/attachment/download/', AttachId) }).then(() => { this.msgSuccess("Download erfolgreich") }).catch(() => {}) } Das ist das Ende. Damit ist dieser Artikel über den Vue-Operationscode zum Klicken auf eine Schaltfläche zum Herunterladen von Dateien (Back-End Java) abgeschlossen. Weitere relevante Vue-Inhalte zum Klicken auf eine Schaltfläche zum Herunterladen von Dateien finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: So zeigen Sie den Kennwortablauf unter Linux an und konfigurieren ihn
>>: Analyse des Prinzips der MySQL-Indexlängenbeschränkung
Inhaltsverzeichnis 1. Docker installieren 2. Erst...
Leistung Zum Beispiel: HTML: <div Klasse="...
Vorwort Ich muss dem Markodwn-Editor, den ich ger...
Inhaltsverzeichnis 1. Workflow ausführen 2. Grund...
Dieser Artikel beschreibt die Installations- und ...
Methode 1: MySQL bietet einen Befehlszeilenparame...
1. Linux-Netzwerkkonfiguration Bevor Sie das Netz...
1. Verwenden Sie ein Centos-Image, um eine lokale...
In diesem Artikelbeispiel wird der spezifische Co...
Die utf8mb4-Kodierung ist eine Obermenge der utf8...
Die Kapselung und Verwendung der Vue-Komponente z...
Dieses Artikelbeispiel teilt den spezifischen Cod...
Die CSS-Animation des rotierenden Flip-Effekts, d...
Inhaltsverzeichnis Vorwort Optimierung SSR Import...
Beim Erstellen einer Website habe ich festgestellt...