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