Удалить файл после возвращения? - PullRequest
0 голосов
/ 13 мая 2018

У меня есть локально сохраненный файл Excel на моем сервере Flask, который я сгенерировал на Pandas df df_output, и я хочу отправить, а затем удалить.

Я вроде как делаю

@app.route('/getfile', methods=['GET', 'OPTIONS'])
@crossdomain(origin='*')
def get_file():
    #Generate an Excel file from he df_outfut Pandas dataframe, save it to disk:
    out_filename = "testfile"
    writer = pd.ExcelWriter(out_filename)
    df_output.to_excel(writer,'test', index=False)
    writer.save()
    return send_file(os.path.join(app.config['UPLOAD_FOLDER'], filename), as_attachment=True)

Таким образом, я могу сделать window.open("http://myapi/getfile"), и файл загружается на мой локальный компьютер. Однако я не хотел бы хранить файл на сервере после его загрузки. НО я отправляю его с заявлением return, поэтому не могу удалить его потом. Какой будет способ удалить сгенерированный файл после его отправки? В основном я ищу:

return send_file(os.path.join(app.config['UPLOAD_FOLDER'], filename), as_attachment=True)
os.remove(filename)

что явно не сработает.

1 Ответ

0 голосов
/ 13 мая 2018

Хитрость заключается в том, чтобы вообще не сохранять файл на жестком диске, а хранить его в памяти:

from flask import Flask, send_from_directory, make_response
import pandas as pd
from io import BytesIO

app = Flask(__name__)

@app.route('/getfile', methods=['GET', 'OPTIONS'])
def get_file():
    datadump = BytesIO()
    df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
    writer = pd.ExcelWriter(datadump)
    df.to_excel(writer, 'test', index=False)
    writer.save()
    response = make_response(datadump.getvalue())
    response.mimetype = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    response.headers.set('Content-Disposition', 'attachment', filename='test.xlsx')
    return response
...