Descargar un archivo usando Flask

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)
¿Disfrutas de nuestros tutoriales? Suscríbete a DelftStack en YouTube para apoyarnos en la creación de más guías en vídeo de alta calidad. Suscríbete
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