我试图在用户下载后删除文件。在我的应用程序中,文件名通过会话变量从另一个脚本传递。
文件结构为:
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可以做什么来打开文件。因此,如果该文件仍然存在,我可以使用它,因为它将在用户下次使用该网站时进行清理。