Предпочтительный метод для загрузки файла, сгенерированного на лету во Flask

У меня есть страница, на которой отображается список файлов в каталоге. Когда пользователь нажимает кнопку «Загрузить», все эти файлы архивируются в один файл, который затем предлагается для загрузки. Я знаю, как отправить этот файл в браузер при нажатии кнопки, и я знаю, как перезагрузить текущую страницу (или перенаправить на другую), но можно ли сделать и то, и другое на одном этапе? Или было бы разумнее перенаправить на другую страницу со ссылкой для загрузки?

Моя загрузка инициирована с помощью 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 ), прежде чем вернуться к обновленной листинг.

14
задан robots.jpg 25 March 2011 в 20:37
поделиться