Загрузите файл с сервера Python на основе Flask

Я пытаюсь заставить работать код, который нашел по этому URL-адресу: http://code.runnable.com/UiIdhKohv5JQAAB6/how-to-download-a-file-generated-on-the-fly-in-flask-for-python

Моя цель — иметь возможность загружать файл в веб-браузере, когда пользователь получает доступ к веб-службе на моем сервере Python на базе Flask.

Поэтому я написал следующий код:

@app.route("/api/downloadlogfile/<path>")
def DownloadLogFile (path = None):
    if path is None:
        self.Error(400)

    try:
        with open(path, 'r') as f:
            response  = make_response(f.read())
        response.headers["Content-Disposition"] = "attachment; filename=%s" % path.split("/")[2]

        return response
    except Exception as e:
        self.log.exception(e)
        self.Error(400)

Но этот код, похоже, не работает. Действительно, я получаю сообщение об ошибке, которое мне не удалось исправить:

Traceback (most recent call last):
File "C:\Python27\lib\site-packages\gevent\pywsgi.py", line 508, in handle_one_response
self.run_application()
File "C:\Python27\lib\site-packages\geventwebsocket\handler.py", line 88, in run_application
return super(WebSocketHandler, self).run_application()
File "C:\Python27\lib\site-packages\gevent\pywsgi.py", line 495, in run_application
self.process_result()
File "C:\Python27\lib\site-packages\gevent\pywsgi.py", line 484, in process_result
for data in self.result:
File "C:\Python27\lib\site-packages\werkzeug\wsgi.py", line 703, in __next__
return self._next()
File "C:\Python27\lib\site-packages\werkzeug\wrappers.py", line 81, in _iter_encoded
for item in iterable:
TypeError: 'Response' object is not iterable

Я обновляю свой пакет Flask и Werkzeug до последней версии, но безуспешно.

Если у кого-то есть идея, было бы здорово.

заранее спасибо


person Alexandre D.    schedule 21.06.2016    source источник
comment
Где находятся эти файлы в файловой системе?   -  person donkopotamus    schedule 21.06.2016
comment
Если вы не генерируете файл динамически, то почему бы не использовать flask.send_file()?   -  person K DawG    schedule 21.06.2016
comment
Даже если вы динамически генерировали, лучше всего сохранить файл на диск, а затем обслуживать его через Apache или nginx, поскольку веб-серверы гораздо эффективнее обслуживают файлы, чем flask.   -  person K DawG    schedule 21.06.2016
comment
@donkopotamus Эти файлы находятся в репозитории журналов в корневом каталоге веб-сервера Python. Поэтому они не генерируются динамически. @KDawG Я уже пытался использовать flask.send_file, но с тем же результатом: объект «Ответ» не повторяется.   -  person Alexandre D.    schedule 21.06.2016


Ответы (1)