【问题标题】:Delete file after returning?返回后删除文件?
【发布时间】:2018-05-13 07:31:48
【问题描述】:

我的 Flask 服务器上有一个本地保存的 Excel 文件,该文件是从 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)

这显然行不通。

【问题讨论】:

    标签: file flask delete-file


    【解决方案1】:

    诀窍是根本不将文件保存在硬盘上,而是将其存储在内存中:

    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
    

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 2019-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多