1. ÜbersichtKlicken Sie im Projekt auf die Download-Schaltfläche, um die Datei herunterzuladen. Bei herkömmlichen Download-Links handelt es sich in der Regel um Get-Links, die öffentlich sind und nach Belieben heruntergeladen werden können. In tatsächlichen Projekten sind einige Download-Links privat. Sie müssen die Post-Methode verwenden und die richtigen Parameter zum Herunterladen übergeben. 2. Django-ProjektDiese Umgebung verwendet Django 3.1.5 und erstellt ein neues Projekt download_demo Installieren des Moduls pip3 installieren djangorestframework django-cors-headers Ändern Sie die Datei download_demo/settings.py INSTALLED_APPS = [ „django.contrib.admin“, „django.contrib.auth“, „django.contrib.contenttypes“, „django.contrib.sessions“, „django.contrib.messages“, „django.contrib.staticfiles“, „api.apps.ApiConfig“, 'corsheaders', # Anwendung cors registrieren ] Registrieren von Middleware MIDDLEWARE = [ „django.middleware.security.SecurityMiddleware“, „django.contrib.sessions.middleware.SessionMiddleware“, „django.middleware.common.CommonMiddleware“, „django.middleware.csrf.CsrfViewMiddleware“, „django.contrib.auth.middleware.AuthenticationMiddleware“, „django.contrib.messages.middleware.MessageMiddleware“, „django.middleware.clickjacking.XFrameOptionsMiddleware“, 'corsheaders.middleware.CorsMiddleware', # Komponente cors registrieren ] Die letzte Zeile fügt hinzu #Cross-Domain-Addition ignoriert CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_ALLOW_ALL = Wahr CORS_ALLOW_METHODEN = ( 'ERHALTEN', 'OPTIONEN', 'PATCH', 'POST', 'SICHT', ) CORS_ALLOW_HEADERS = ( "XMLHttpRequest", 'X_FILENAME', "Kodierung akzeptieren", 'Genehmigung', 'Inhaltstyp', 'nicht', 'Herkunft', "Benutzeragent", 'x-csrftoken', 'x-angefordert-mit', 'Pragma', ) Ändern Sie download_demo/urls.py von django.contrib importiere admin von django.urls Importpfad aus API-Importansichten URL-Muster = [ Pfad('admin/', admin.site.urls), Pfad('download/excel/', Ansichten.ExcelFileDownload.as_view()), ] Ändern Sie api/views.py von django.shortcuts importiere render,HttpResponse aus download_demo Importeinstellungen von django.utils.encoding importiere escape_uri_path von django.http importiere StreamingHttpResponse von django.http importiere JsonResponse von rest_framework.views importiere APIView vom Rest_Framework-Importstatus Betriebssystem importieren Klasse ExcelFileDownload(APIView): def post(selbst, Anfrage): drucken(Anfrage.Daten) # Dateiname = "Big River.xlsx" Dateiname = request.data.get("Dateiname") Download-Dateipfad = os.Pfad.join(Einstellungen.BASE_DIR, "Upload",Dateiname) drucken("Download-Dateipfad",Download-Dateipfad) Antwort = self.big_file_download(Download-Dateipfad, Dateiname) wenn Antwort: Antwort zurückgeben return JsonResponse({'status': 'HttpResponse', 'msg': 'Excel-Download fehlgeschlagen'}) def file_iterator(selbst, Dateipfad, Blockgröße=512): """ Dateigenerator, um zu verhindern, dass die Datei zu groß wird und einen Speicherüberlauf verursacht:param file_path: absoluter Dateipfad:param chunk_size: Blockgröße:return: Generator """ mit open(file_path, mode='rb') als f: während True: c = f.lesen(Blockgröße) wenn c: Ausbeute c anders: brechen def big_file_download(selbst, Download-Dateipfad, Dateiname): versuchen: Antwort = StreamingHttpResponse(self.file_iterator(download_file_path)) # Überschriften hinzufügen Antwort ['Inhaltstyp'] = 'Anwendung/Oktett-Stream' Antwort ['Access-Control-Expose-Headers'] = "Inhaltsdisposition, Inhaltstyp" Antwort ['Content-Disposition'] = "Anhang; Dateiname = {}". Format (Escape_uri_Pfad (Dateiname)) Antwort zurückgeben außer Ausnahme: return JsonResponse({'status': status.HTTP_400_BAD_REQUEST, 'msg': 'Excel-Download fehlgeschlagen'}, Status = Status.HTTP_400_BAD_REQUEST) Erstellen Sie eine Upload-Datei im Stammverzeichnis des Projekts Fügen Sie eine Excel-Datei ein, zum Beispiel: Great Rivers.xlsx 3. Vue-ProjektErstellen Sie ein neues Vue-Projekt und installieren Sie das ElementUI-Modul. Erstellen Sie eine neue Datei test.vue <Vorlage> <div Stil="Breite: 70 %;Rand links: 30px;Rand oben: 30px;"> <el-button class="filter-item" type="success" icon="el-icon-download" @click="downFile()">Herunterladen</el-button> </div> </Vorlage> <Skript> Axios von „Axios“ importieren Standard exportieren { Daten() { zurückkehren { } }, montiert: Funktion () { }, Methoden: { downloadFile(url, options = {}){ returniere neues Promise((lösen, ablehnen) => { // console.log(`${url} Anforderungsdaten, Parameter=>`, JSON.stringify(Optionen)) // axios.defaults.headers['Inhaltstyp'] = 'Anwendung/json; Zeichensatz=UTF-8' axios({ Methode: 'post', url: URL, // Anforderungsadresse data: Optionen, // Parameter responseType: „blob“ // gibt den vom Server zurückgegebenen Datentyp an}).then( Antwort => { // console.log("Download-Antwort",Antwort) auflösen(Antwort.Daten) let blob = neuer Blob([Antwort.Daten], { Typ: „application/vnd.ms-excel“ }) // konsole.log(blob) // let Dateiname = Datum.parse(neues Datum()) + '.xlsx' // Dateinamen ausschneiden let fileNameEncode = response.headers['content-disposition'].split("filename=")[1]; // Dekodierung let fileName = decodeURIComponent(fileNameEncode) // console.log("Dateiname",Dateiname) wenn (window.navigator.msSaveOrOpenBlob) { // console.log(2) navigator.msSaveBlob(blob, Dateiname) } anders { // console.log(3) var link = document.createElement('a') link.href = Fenster.URL.createObjectURL(blob) link.download = Dateiname link.klick() //Speicher freigeben window.URL.revokeObjectURL(link.href) } }, err => { ablehnen (Fehler) } ) }) }, // Datei herunterladen downFile(){ let postUrl = "http://127.0.0.1:8000/download/excel/" let Parameter = { Dateiname: "Big River.xlsx", } // console.log("Parameter herunterladen",Params) dies.downloadFile(postUrl,params) }, } } </Skript> <Stil> </Stil> Hinweis: Hier wird eine Post-Anfrage verwendet und der Dateiname an die API übermittelt, um die angegebene Datei herunterzuladen. Besuchen Sie die Testseite und klicken Sie auf die Schaltfläche „Herunterladen“. Der Download erfolgt automatisch Öffnen Sie die Symbolleiste, um die Antwortinformationen anzuzeigen Dies ist hier der von Django zurückgegebene Dateiname. Dies ist auch der vom Browser heruntergeladene und gespeicherte Dateiname. Wenn chinesische Schriftzeichen gefunden werden, werden sie mit URL-Code codiert. Daher wird im Vue-Code die Content-Disposition abgeschnitten und der Dateiname abgerufen. Oben sind die Einzelheiten des Beispiels für das Herunterladen von Dateien mit vue+django aufgeführt. Weitere Informationen zum Herunterladen von Dateien mit vue+django finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Tutorial zur Remote-Verbindung mit einer MySQL-Datenbank unter Linux
>>: Hinweise zur Adresszuordnung von Gerätetreibern im Linux-Kernel
1. Erklärung von provide und inject Mit „Bereitst...
Redis ist ein verteilter Cache-Dienst. Caching is...
Hier sind einige Punkte, die Sie bei der Registri...
Drag & Drop ist eine gängige Funktion im Fron...
Inhaltsverzeichnis Überblick 1. Verstehen Sie die...
Frage Im vorherigen Artikel zur domänenübergreife...
Das img-Tag in XHTML sollte wie folgt geschrieben...
Legen Sie Ihr eigenes Webprojekt im Verzeichnis w...
1. Einleitung Vor einiger Zeit gab es eine Reihe ...
Ich verwende Redis seit Kurzem und finde es recht...
Inhaltsverzeichnis Vorwort Anwendungsszenarios fü...
1. JS-Prinzip der asynchronen Ausführung Wir wiss...
Redux ist ein einfacher Statusmanager. Wir werden...
Inhaltsverzeichnis 1. Übersicht 2. Laden Sie das ...
Ich werde nicht viel Unsinn erzählen, schauen wir...