Python Flask下载文件返回0字节

发布于 2021-01-29 16:35:18

这是我的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标头,但是没有用。不知道还有什么可能。

关注者
0
被浏览
127
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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

    @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文档清理代码



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看