-1

I have built a flask app wherein the user uploads a file, it gets processed and thereafter, gets stored in a particular folder on the flask server itself. Now, I wanted to generate a download link for this file (a link I would be emailing to the user) instead of directly allowing the user to download the file. Any ideas how I should go about it? Thank You.

davidism
  • 121,510
  • 29
  • 395
  • 339
Gap
  • 1
  • 2

1 Answers1

0

You can use the following:

Note: Its recommended to use send_from_directory and keep the downloadable files in some specific directories permitted_directory so that the user can't download any file he wants from the whole server.

@app.route('/download_link/<path:filename>', methods=['GET', 'POST'])
def download_link():
   permitted_directory='/path/to/directoy/'
   return send_from_directory(directory=permitted_directory, filename=filename,as_attachment=True,cache_timeout=0)

then by using the serverURL/download_link/<filename>, the file will then be downloaded.

E.g.:

for serverURL=0.0.0.0:8080 and file=generated_file.csv 0.0.0.0:8080/download_link/generated_file.csv --> will be the download link for the file


You can use send_file as an alternative if you are not considering safe approaches and os.path.isfile() for handling unexisting files.

mohamadmansourx
  • 361
  • 2
  • 8
  • So when I used send_from_directory, the server if giving an unhandled exception error while when I use send_file, it works fine....any specific reason for it? – Gap Jul 14 '21 at 18:14