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

Ale*_* D. 6 python werkzeug flask webclient-download

我正在努力使工作成为我在此URL中找到的代码:http://code.runnable.com/UiIdhKohv5JQAAB6/how-to-download-a-file-generated-on-the-fly-in-flask-换蟒蛇

我的目标是当用户访问基于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)
Run Code Online (Sandbox Code Playgroud)

但是这段代码似乎不起作用.确实,我得到了一个我无法解决的错误:

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
Run Code Online (Sandbox Code Playgroud)

我将Flask和Werkzeug软件包更新到最新版本但没有成功.

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

提前致谢

K D*_*awG 16

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

@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)
Run Code Online (Sandbox Code Playgroud)

  • 那个很深,伙计.我们都问自己的问题. (66认同)
  • send_file可以通过与`from flask import send_file`导入来使用。 (2认同)