У меня есть страница, которая отображает список файлов в каталоге. Когда пользователь нажимает кнопку "Загрузить", все эти файлы зажимаются в один файл, который затем предлагается для загрузки. Я знаю, как отправить этот файл в браузер при нажатии кнопки, и я знаю, как перезагрузить текущую страницу (или перенаправить на другую), но можно ли сделать оба на одном шаге? Или было бы более целесообразно перенаправить на другую страницу с помощью ссылки для скачивания?
Моя загрузка начинается с API-интерфейса Flask 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
), прежде чем возвращаться к обновленному списку.