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']) def test_download():     buffer = StringIO()     buffer.write('Just some letters.')     buffer.seek(0)     return send_file(buffer, as_attachment = True,\     attachment_filename = 'a_file.txt', mimetype = 'text/csv')   A file downloads with the proper name, however the file is completely blank.
Any ideas? Issues with encoding? Has this been answered elsewhere? Thanks!
The issue here is that in Python 3 you need to use StringIO with csv.write and send_file requires BytesIO, so you have to do both.
@app.route('/test_download') def test_download():     row = ['hello', 'world']     proxy = io.StringIO()          writer = csv.writer(proxy)     writer.writerow(row)          # Creating the byteIO object from the StringIO Object     mem = io.BytesIO()     mem.write(proxy.getvalue().encode())     # seeking was necessary. Python 3.5.2, Flask 0.12.2     mem.seek(0)     proxy.close()      return send_file(         mem,         as_attachment=True,         attachment_filename='test.csv',         mimetype='text/csv'     ) 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With