Descargar un archivo usando Flask

Salman Mehmood 18 agosto 2022
Descargar un archivo usando Flask

Aprenderemos, con esta explicación, cómo hacer un enlace descargable para descargar un archivo como archivo adjunto usando la función send_file en Flask.

Descargue un archivo como archivo adjunto con la ayuda de la función send_file en Flask

En Flask Framework, podemos hacer un descargador de archivos para descargar todo tipo de archivos como PDF, JPEG, MP3 u otros archivos, pero la lógica permanece constante. Ahora solo necesitamos ir a nuestro editor de texto y crear un archivo simple app.py dentro del mismo directorio donde se encuentra nuestro archivo PNG.

Ahora también necesitamos crear una carpeta de plantillas, y dentro de esta, crearemos un archivo index.html, y eso es todo. Ahora, antes que nada, necesitamos importar la biblioteca Flask.

Solo necesita algunas bibliotecas requeridas y la biblioteca send_file:

from flask import Flask, render_template, send_file

Necesitamos crear una variable app e inicializar la aplicación Flask usando el atributo __name__. Ahora inicializaremos nuestra función principal, y solo necesitamos llamar a la función run dentro de este bloque y pasarle debug igual a True, por lo que reiniciará la aplicación cada vez que hagamos cambios.

app = Flask(__name__)

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

Debemos crear una ruta y una función para cargar el archivo HTML. Para ello, crearemos una ruta home que sea /, y cuando le demos a esta ruta, llamará a una función que sería Main_Page().

Esta función devuelve render_template(); dentro de este, pasaremos el archivo index.html, que cargará la plantilla almacenada dentro del archivo index.html.

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

Ahora escribiremos una plantilla básica que contendrá el archivo descargado.

Usaremos solo unas pocas etiquetas, la primera será una etiqueta <h2> que contendrá el encabezado, y la segunda es una etiqueta <p> que es una etiqueta de párrafo. Dentro de esta etiqueta, usaremos la etiqueta ancla, y el atributo href será igual a una propiedad que es url_for, y le pasaremos su nombre.

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

Si ejecutamos esta aplicación y abrimos localhost 5000, nos dirá que no pudo construir una URL para el punto final Download_File.

Flask Descargar archivo de salida 1

Esta sintaxis url_for('Download_File') está buscando un archivo de descarga, por lo que solo necesitamos hacer una solicitud de obtención para hacer esto.

Ahora crearemos otra ruta, /download. Y crearemos una función con el mismo nombre que especificamos dentro de la propiedad url_for().

Ahora necesitaremos especificar la ruta del archivo, por lo que crearemos una variable que sería RUTA y almacenaremos la ruta dentro de esta variable.

Devolveremos el archivo usando la función send_file(), que toma dos parámetros. El primero será una ruta, y el segundo será as_attachment igual a True porque queremos hacer un archivo descargable como archivo adjunto.

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

Si guardamos y refrescamos la página, veremos que se convierte en un hipervínculo, y podemos descargar el archivo haciendo clic en este enlace.

Flask Descargar archivo de salida 2

Código Python completo:

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

Artículo relacionado - Flask File