Herunterladen einer Datei mit Flask

Salman Mehmood 15 Februar 2024
Herunterladen einer Datei mit Flask

Mit dieser Erklärung lernen wir, wie man einen Download-Link erstellt, um eine Datei als Anhang herunterzuladen, indem man die Funktion send_file in Flask verwendet.

Herunterladen einer Datei als Anhang mit Hilfe der Funktion send_file in Flask

Im Flask Framework können wir einen Datei-Downloader erstellen, um alle Arten von Dateien wie PDF, JPEG, MP3 oder andere Dateien herunterzuladen, aber die Logik bleibt konstant. Jetzt müssen wir nur noch zu unserem Texteditor gehen und eine einfache app.py-Datei im selben Verzeichnis erstellen, in dem sich unsere PNG-Datei befindet.

Jetzt müssen wir auch einen Vorlagenordner erstellen, und darin erstellen wir eine index.html-Datei, und das war’s. Jetzt müssen wir zunächst die Flask-Bibliothek importieren.

Sie benötigen nur einige erforderliche Bibliotheken und die Bibliothek send_file:

from flask import Flask, render_template, send_file

Wir müssen eine app-Variable erstellen und die Flask-Anwendung mit dem __name__-Attribut initialisieren. Jetzt werden wir unsere Hauptfunktion initialisieren, und wir müssen nur die Funktion run innerhalb dieses Blocks aufrufen und ihr debug gleich True übergeben, sodass die Anwendung neu gestartet wird, wenn wir Änderungen vornehmen.

app = Flask(__name__)

if __name__ == "__main__":
    app.run(debug=True)

Wir müssen eine Route und eine Funktion zum Laden der HTML-Datei erstellen. Dazu erstellen wir eine Home-Route mit dem Namen /, und wenn wir diese Route erreichen, wird eine Funktion aufgerufen, die Main_Page() wäre.

Diese Funktion gibt render_template() zurück; Darin übergeben wir die Datei index.html, die die in der Datei index.html gespeicherte Vorlage lädt.

@app.route("/")
def Main_Page():
    return render_template("index.html")

Jetzt schreiben wir eine grundlegende Vorlage, die die heruntergeladene Datei enthält.

Wir werden nur wenige Tags verwenden, das erste ist ein <h2>-Tag, das die Überschrift enthält, und das zweite ist ein <p>-Tag, das ein Absatz-Tag ist. Innerhalb dieses Tags verwenden wir das Anker-Tag, und das Attribut href entspricht einer Eigenschaft, die url_for ist, und übergibt ihr ihren Namen.

<h2>Downloqad this file</h2>
<p> <a href="{{url_for('Download_File')}}">Download</a></p>

Wenn wir diese Anwendung ausführen und localhost 5000 öffnen, teilt sie uns mit, dass sie keine URL für den Endpunkt Download_File erstellen konnte.

Flask-Download-Dateiausgabe 1

Diese Syntax url_for('Download_File') sucht nach einer Download-Datei, also müssen wir dazu nur eine Get-Anfrage stellen.

Jetzt erstellen wir eine weitere Route, /download. Und wir erstellen eine Funktion mit demselben Namen, den wir in der Eigenschaft url_for() angegeben haben.

Jetzt müssen wir den Pfad der Datei angeben, also erstellen wir eine Variable namens PATH und speichern den Pfad in dieser Variablen.

Wir senden die Datei mit der Funktion send_file() zurück, die zwei Parameter benötigt. Der erste ist ein Pfad und der zweite ist as_attachment gleich True, weil wir eine herunterladbare Datei als Anhang erstellen möchten.

@app.route("/download")
def Download_File():
    PATH = "Flask-logo.png"
    send_file(PATH, as_attachment=True)

Wenn wir die Seite speichern und aktualisieren, sehen wir, dass sie in einen Hyperlink umgewandelt wird, und wir können die Datei herunterladen, indem wir auf diesen Link klicken.

Flask-Download-Dateiausgabe 2

Vollständiger Python-Code:

from flask import Flask, render_template, send_file

app = Flask(__name__)


@app.route("/")
def Main_Page():
    return render_template("index.html")


@app.route("/download")
def Download_File():
    PATH = "Flask-logo.png"
    return send_file(PATH, as_attachment=True)


if __name__ == "__main__":
    app.run(debug=True)
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Verwandter Artikel - Flask File