从Flask app下载文件:excel文件为空,无法解析文件路径

时间:2018-02-02 20:05:53

标签: python flask

我试图在用户下载后删除文件。在我的应用程序中,文件名通过会话变量从另一个脚本传递。

文件结构为:

app
    routes.py
    --tmp<--location where files are downloaded and retrieved

第一个片段有效:文件已成功检索并下载,因此我知道会话变量正在运行。

def download_jrnlvl(): 
    output_file1 = session.get('session_variable', None)
    return send_file(output_file1, attachment_filename='jrnlvl_' + today + '.xlsx', as_attachment=True)

在我发布的问题上,我被提到了this answer,我尝试应用解决方案,使用生成器来提供服务然后删除该文件。

def download_outputfile(): 
output_file1 = session.get('output_file', None)
path = os.path.join(current_app.instance_path,output_file1)
def generate():
    with open(path) as f:
        yield from f
    os.remove(path)
r = app.response_class(generate(), mimetype='text/xlsx')
r.headers.set('Content-Disposition', 'attachment', filename='outputfile1.xlsx')
return r

下载的文件为空。

使用Flask Debug Toolbar我在“请求变量”下看到以下内容,我不确定如何将此信息应用于我的困境。尝试如下的绝对路径不起作用:

  

( '信息',   'E:\蟒\烧瓶\ pminsts_v2.5.3 \应用\实例\ TMP / TMP / output_020218.xlsx'),   ('message','E:/tmp/tmp/output_020218.xlsx'),('message',   'tmp / tmp / output_020218.xlsx'),('message',   '/tmp/tmp/output_020218.xlsx'),('message',   '/app/tmp/tmp/output_020218.xlsx'),('message',   'E:/python/flask/pminsts_v2.5.3/app/tmp/tmp/output_020218.xlsx'),   ('信息',   'E:/python/flask/pminsts_v2.5.3/app/tmp \ TMP / output_020218.xlsx'),   ('信息',   'E:/python/flask/pminsts_v2.5.3/app/tmp \ TMP / output_020218.xlsx'),   ('信息',   'E:/python/flask/pminsts_v2.5.3/app/tmp/output_020218.xlsx'),   ('信息',   'E:/python/flask/pminsts_v2.5.3/app/tmp/output_020218.xlsx'),   ('信息',   'E:/python/flask/pminsts_v2.5.3/app/tmp/output_020218.xlsx'),   ('信息',   'E:/python/flask/pminsts_v2.5.3/app/tmp/output_020218.xlsx'),   ('信息',   'E:/python/flask/pminsts_v2.5.3/app/tmp/output_020218.xlsx'),   ('信息',   'E:/python/flask/pminsts_v2.5.3/app/instance/tmp \ TMP / output_020218.xlsx'),   ('信息',   'E:\蟒\烧瓶\ pminsts_v2.5.3 \应用\实例\ TMP / output_020218.xlsx'),   ('信息',   'E:\蟒\烧瓶\ pminsts_v2.5.3 \应用\实例\ TMP / output_020218.xlsx'),   ('信息',   'E:/python/flask/pminsts_v2.5.3/app/tmp/output_combined_020218.xlsx')

在使用生成器的代码中,我尝试了一个到'tmp'目录的绝对路径,我试图找到如何使用instance_path的句柄。如何获得生成器工作的正确路径?

提前感激。

编辑:

我在this answer中应用了这项技术,编写了一个类,以便在下载后删除文件。就我而言,创建了三个文件。选择一个后,其他人将被删除但所选文件仍然存在。我认为这是因为我在Windows中,Windows可以做什么来打开文件。因此,如果该文件仍然存在,我可以使用它,因为它将在用户下次使用该网站时进行清理。

0 个答案:

没有答案