Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从基于Flask的Python服务器下载文件_Python_Flask_Werkzeug_Webclient Download - Fatal编程技术网

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

从基于Flask的Python服务器下载文件,python,flask,werkzeug,webclient-download,Python,Flask,Werkzeug,Webclient Download,我正在尝试使work成为我在以下URL中找到的代码: 我的目标是,当用户访问基于Flask的Python服务器上的web服务时,能够在web浏览器上下载文件 因此,我编写了以下代码: @app.route("/api/downloadlogfile/<path>") def DownloadLogFile (path = None): if path is None: self.Error(400) try: with open(pa

我正在尝试使work成为我在以下URL中找到的代码:

我的目标是,当用户访问基于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)
我将Flask和Werkzeug软件包更新到最新版本,但没有成功

如果有人有主意,那就太好了


提前感谢

解决此问题的最佳方法是在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)
@app.route(“/api/downloadlogfile/”)
def下载日志文件(路径=无):
如果路径为“无”:
自身错误(400)
尝试:
返回发送文件(路径,如附件=True)
例外情况除外,如e:
self.log.exception(e)
自身错误(400)

文件系统上的这些文件在哪里?如果您不是动态生成文件,为什么不使用
flask.send\u file()
?即使是动态生成,最佳做法是将文件保存到磁盘,然后通过Apache或nginx提供,因为web服务器在提供文件方面比flask更高效。@donkopotamus这些文件位于Python web服务器根目录下的“日志”存储库中。因此它们不是动态生成的@KDawG我已经尝试使用flask.send_file,但结果相同:“'Response'对象不可编辑”。什么是self?可以使用send_文件,方法是从flask import send_文件中导入
,python中的self基本上等同于javascript中的“this”。在定义类时使用,这里只有一个函数,而
this
没有传递给函数,因此可以理解,这里对
this
的引用没有任何意义。
@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)