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