Tengo una aplicación Flask en la que, al usar una route Flask, el servidor crea un archivo csv y lo guarda en el servidor. Usando un botón generado en la página del cliente, se activa otra route de Flask para obtener el archivo más reciente, moverlo a una carpeta tmp y enviar ese archivo al usuario usando send_file .
En este momento, cuando ejecuto el proceso por primera vez y descargo el archivo, todo funciona como se esperaba. Sin embargo, la segunda vez que ejecuto el proceso, me sirve el CSV anterior en lugar del recién generado. Esto continúa hasta que presiono el botón de actualización en mi navegador.
El siguiente es el código de mi aplicación:
from flask import Flask, render_template, flash, redirect, request, url_for, Response, send_file import os import time import shutil import glob app = Flask(__name__) app.config['SECRET_KEY'] = 'secret!' @app.route('/') def index(): return render_template('index.html') @app.route('/downloadcsv') def downloadcsv(): current = os.getcwd() try: list = glob.glob('{}/*.csv'.format(current)) except: print('No file found') basename = os.path.basename(os.path.normpath(max(list, key=os.path.getctime))) shutil.move(basename, './tmp/{}'.format(basename)) return send_file('./tmp/{}'.format(basename), as_attachment=True)En caso de que sea necesario, el siguiente es el código JS que "genera" el botón de descarga:
var download = '<div id="downloadsection" class="container-contact100-form-btn"><a href="/downloadcsv"><button id="download" class="contact100-form-btn"> <span>DOWNLOAD CSV</span></button></a></div>';Por favor, hazme saber si estoy complicando demasiado el proceso de descarga...
¡¡Gracias!!
send_file tiene un tiempo de espera de almacenamiento en caché que no está configurando. Enviará el mismo archivo que se ha almacenado en caché a menos que le indique que no almacene el archivo en caché de la siguiente manera:
send_file('./tmp/{}'.format(basename), as_attachment=True, cache_timeout=0)Consulte las siguientes referencias para obtener más información:
http://flask.pocoo.org/docs/1.0/api/#flask.send_file
http://flask.pocoo.org/docs/1.0/api/#flask.Flask.get_send_file_max_age
http://flask.pocoo.org/docs/1.0/config/#SEND_FILE_MAX_AGE_DEFAULT
@ritlew prácticamente responde a la pregunta, para agregar a su respuesta, después de agregar cache_timeout=0 , borre el caché del navegador y presione la URL en modo de incógnito.
También puedes probar: