【发布时间】:2011-03-23 19:02:13
【问题描述】:
我有一个显示目录中文件列表的页面。当用户单击“下载”按钮时,所有这些文件都被压缩成一个文件,然后提供下载。我知道如何在单击按钮时将此文件发送到浏览器,并且我知道如何重新加载当前页面(或重定向到不同的页面),但是是否可以在同一步骤中同时执行这两项操作?还是用下载链接重定向到不同的页面更有意义?
我的下载是使用 Flask API 的 send_from_directory 启动的。相关测试代码:
@app.route('/download', methods=['GET','POST'])
def download():
error=None
# ...
if request.method == 'POST':
if download_list == None or len(download_list) < 1:
error = 'No files to download'
else:
timestamp = dt.now().strftime('%Y%m%d:%H%M%S')
zfname = 'reports-' + str(timestamp) + '.zip'
zf = zipfile.ZipFile(downloaddir + zfname, 'a')
for f in download_list:
zf.write(downloaddir + f, f)
zf.close()
# TODO: remove zipped files, move zip to archive
return send_from_directory(downloaddir, zfname, as_attachment=True)
return render_template('download.html', error=error, download_list=download_list)
更新:作为一种解决方法,我现在通过单击按钮加载一个新页面,让用户在返回更新列表之前启动下载(使用 send_from_directory)。 p>
【问题讨论】: