Flask 文件下载:文件名在会话中保留
Flask file download: filename persists within the session
我有一个 flask 站点和一个生成 excel 文件的网络表单。我遇到的问题是,如果我将用户送回表单再次提交,即使在 tmp 目录中生成了新文件,也会下载具有相同文件名和数据的先前文件。所以,我认为这与我的会话变量有关。
我用这个函数为文件名添加时间戳以确保文件名是唯一的:
def rightnow():
return dt.datetime.now().strftime("%m%d%y%h%m%S%f")
在routes.py中,下载调用如下:
@app.route('/download/', methods=['POST','GET'])
def download_file():
output_file = session.get('new_file', None)
r = send_file(output_file, attachment_filename=output_file, as_attachment=True)
return r
这是生成 excel 个文件的脚本代码:
new_file = 'output_' + rightnow() + '.xlsx'
writer = pd.ExcelWriter('tmp/' + new_file, engine='xlsxwriter')
df.to_excel(writer, sheet_name="data")
writer.save()
session['new_file'] = 'tmp/' + new_file
模板页面的下载语句:
<a class="button" href="{{url_for('download_file')}}">Download new data</a>
我有一个 "Submit Again" 按钮绑定到简单 javascript
<button onclick="goBack()">Submit Again</button>
<script>//for "revise search" button
function goBack() {
window.history.back();
}
</script>
我试过 session.clear()
但没有成功。
当用户单击 "Submit Again" 按钮以便删除保存的文件名时,如何删除会话?
编辑:我检查了文件名和会话变量的变量,它们相同,但与下载时分配的文件名不同。例如,该文件由我编写的脚本命名为 'output_May0554733504.xlsx'——我可以在 tmp 目录中看到它。但是当我去下载文件时,文件名不同:'output_May0536794357.xlsx'
这个其他文件名不是 tmp 目录中另一个文件的文件名。我下载的任何文件都将是 'output_May0536794357.xlsx'.
如果 session.pop('new_file')
不起作用,您可以尝试 session.modified = True
强制更改会话。
我有一个 flask 站点和一个生成 excel 文件的网络表单。我遇到的问题是,如果我将用户送回表单再次提交,即使在 tmp 目录中生成了新文件,也会下载具有相同文件名和数据的先前文件。所以,我认为这与我的会话变量有关。
我用这个函数为文件名添加时间戳以确保文件名是唯一的:
def rightnow():
return dt.datetime.now().strftime("%m%d%y%h%m%S%f")
在routes.py中,下载调用如下:
@app.route('/download/', methods=['POST','GET'])
def download_file():
output_file = session.get('new_file', None)
r = send_file(output_file, attachment_filename=output_file, as_attachment=True)
return r
这是生成 excel 个文件的脚本代码:
new_file = 'output_' + rightnow() + '.xlsx'
writer = pd.ExcelWriter('tmp/' + new_file, engine='xlsxwriter')
df.to_excel(writer, sheet_name="data")
writer.save()
session['new_file'] = 'tmp/' + new_file
模板页面的下载语句:
<a class="button" href="{{url_for('download_file')}}">Download new data</a>
我有一个 "Submit Again" 按钮绑定到简单 javascript
<button onclick="goBack()">Submit Again</button>
<script>//for "revise search" button
function goBack() {
window.history.back();
}
</script>
我试过 session.clear()
但没有成功。
当用户单击 "Submit Again" 按钮以便删除保存的文件名时,如何删除会话?
编辑:我检查了文件名和会话变量的变量,它们相同,但与下载时分配的文件名不同。例如,该文件由我编写的脚本命名为 'output_May0554733504.xlsx'——我可以在 tmp 目录中看到它。但是当我去下载文件时,文件名不同:'output_May0536794357.xlsx'
这个其他文件名不是 tmp 目录中另一个文件的文件名。我下载的任何文件都将是 'output_May0536794357.xlsx'.
如果 session.pop('new_file')
不起作用,您可以尝试 session.modified = True
强制更改会话。