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
.
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.
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)
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