Flask/Werkzeug如何为文件下载添加HTTP内容长度头

19 投票
3 回答
27420 浏览
提问于 2025-04-16 04:41

我正在使用Flask(基于Werkzeug),它是用Python写的。

用户可以下载一个文件,我使用的是send_from_directory函数

但是在实际下载文件时,HTTP头中的content-length没有设置。所以用户不知道正在下载的文件有多大。

我可以用Python中的os.path.getsize(FILE_LOCATION)来获取文件大小(以字节为单位),但找不到在Flask中设置content-length头的方法。

有什么想法吗?

3 个回答

39

从0.6版本开始,给响应对象添加头部信息的标准方法是通过 make_response 这个方法(详细信息可以查看 Flask文档)。

def index():
    response = make_response(render_template('index.html', foo=42))
    response.headers['X-Parachutes'] = 'parachutes are cool'
    return response
40

我也需要这个,不过是为了每一个请求,所以我做了以下这些(根据文档的内容):

@app.after_request
def after_request(response):
    response.headers.add('Access-Control-Allow-Origin', '*')
    return response
15

我觉得你可以这样做(这个代码没测试过):

from flask import Response
response = Response()
response.headers.add('content-length', str(os.path.getsize(FILE_LOCATION)))

可以参考:Werkzeug的Headers对象Flask的Response对象

撰写回答