Python Flask下载文件返回0字节


问题内容

这是我的flask服务器正在运行的代码:

from flask import Flask, make_response
import os

app = Flask(__name__)

@app.route("/")
def index():
        return str(os.listdir("."))

@app.route("/<file_name>")
def getFile(file_name):
        response = make_response()
        response.headers["Content-Disposition"] = ""\
        "attachment; filename=%s" % file_name
        return response

if __name__ == "__main__":
        app.debug = True
        app.run("0.0.0.0", port = 6969)

如果用户访问该站点,它将在目录中打印文件。但是,如果您访问site:6969 /
filename,则应下载该文件。但是我做错了事,因为文件大小总是0字节,下载的文件中没有数据。有什么想法吗。我尝试添加content-
length标头,但是没有用。不知道还有什么可能。


问题答案:

标头所做的只是告诉浏览器将响应数据视为具有特定名称的可下载文件。它实际上没有设置任何响应数据,这就是为什么它为空。

您需要在响应上设置文件内容才能正常工作。

@app.route("/<file_name>")
def getFile(file_name):
    headers = {"Content-Disposition": "attachment; filename=%s" % file_name}
    with open(file_name, 'r') as f:
        body = f.read()
    return make_response((body, headers))

编辑-
根据api文档清理代码