Python and Flask - Trying to have a function return a file content
You do need to use the flask.send_file()
callable to produce a proper response, but need to pass in a filename or a file object that isn't already closed or about to be closed. So passing in the full path would do:
return send_file(os.path.join(app.config['UPLOAD_FOLDER'], 'file_parsed_2nd.txt'))
When you pass in a file object you cannot use the with
statement, as it'll close the file object the moment you return from your view; it'll only be actually read when the response object is processed as a WSGI response, outside of your view function.
You may want to pass in a attachment_filename
parameter if you want to suggest a filename to the browser to save the file as; it'll also help determine the mimetype. You also may want to specify the mimetype explicitly, using the mimetype
parameter.
You could also use the flask.send_from_directory()
function; it does the same but takes a filename and a directory:
return send_from_directory(app.config['UPLOAD_FOLDER'], 'file_parsed_2nd.txt')
The same caveat about a mimetype applies; for .txt
the default mimetype would be text/plain
. The function essentially joins the directory and filename (with flask.safe_join()
which applies additional safety checks to prevent breaking out of the directory using ..
constructs) and passes that on to flask.send_file()
.