I have a Flask-based website where users can download some PDF files.
This is straightforward to implement using Flask's send_file() and send_from_directory().
For example:
@app.route('/downloadreport')
def download_report():
return send_from_directory(
'/reports',
'my_report.pdf',
as_attachment=True)
I'd like to perform some logic (let's call it after_download()) AFTER the download is complete.
I've tried using the @after_this_request hook. But it looks like send_file() runs asynchronously so @after_this_request may fire before the file is downloaded.
- For example, if the file is very large, a download may take a while so
@after_this_requestseems to fire while the file is being downloaded. - It looks from the documentation like
send_file()uses WSGI's file wrapper to effectuate the download...maybe that's why it's running asynchronously?
Is there a way to call after_download() so that it's guaranteed to run after send_file() has completed sending the file to a user?