I'm using python 3.5 and flask 0.10.1 and liking it, but having a bit of trouble with send_file. I ultimately want to process a pandas dataframe (from Form data, which is unused in this example but necessary in the future) and send it to download as a csv (without a temp file). The best way to accomplish this I've seen is to us StringIO.
Here is the code I'm attempting to use:
@app.route('/test_download', methods = ['POST'])
buffer = StringIO()
buffer.write('Just some letters.')
return send_file(buffer, as_attachment = True,\
attachment_filename = 'a_file.txt', mimetype = 'text/csv')
I guess you should write bytes.
from io import BytesIO from flask import Flask, send_file app = Flask(__name__) @app.route('/test_download', methods=['POST']) def test_download(): # Use BytesIO instead of StringIO here. buffer = BytesIO() buffer.write(b'jJust some letters.') # Or you can encode it to bytes. # buffer.write('Just some letters.'.encode('utf-8')) buffer.seek(0) return send_file(buffer, as_attachment=True, attachment_filename='a_file.txt', mimetype='text/csv') if __name__ == '__main__': app.run(debug=True)