python - 从基于 Flask 的 Python 服务器下载文件

标签 python flask werkzeug webclient

我正在尝试使用我在以下网址找到的代码:http://code.runnable.com/UiIdhKohv5JQAAB6/how-to-download-a-file-generated-on-the-fly-in-flask-for-python

我的目标是当用户访问基于 Flask 的 Python 服务器上的 Web 服务时,能够在 Web 浏览器上下载文件。

所以我写了下面的代码:

@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 包更新到最新版本但没有成功。

如果有人有想法那就太好了。

提前致谢

最佳答案

解决这个问题的最好方法是使用已经预定义的辅助函数 send_file()在 flask 中:

from flask import send_file

@app.route("/api/downloadlogfile/<path>")
def DownloadLogFile (path = None):
    if path is None:
        self.Error(400)
    try:
        return send_file(path, as_attachment=True)
    except Exception as e:
        self.log.exception(e)
        self.Error(400)

关于python - 从基于 Flask 的 Python 服务器下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37937091/

相关文章:

Python:具有程序员定义属性的文件

python - 在 Django 中向 QuerySet 添加文字值

Python: "while"太慢,实际执行时sleep(0.25)变成sleep(3)

python - 为什么 Visual Studio Code 不断更改工作目录?

python - Flask 上传中的类型错误 : storage must be a werkzeug. FileStorage

python - 如何构建包含双字母的 gensim 字典?

python - Python Flask 中 ssl_context 选项的区别

python - 如何从 Flask 制作 html 弹出窗口?

python - 等待值然后停止服务器,在 'werkzeug.server.shutdown' 被弃用并删除之后

python - 扩展 werkzeug useragent 类