Flask/Werkzeug how to attach HTTP content-length header to file download

匿名 (未验证) 提交于 2019-12-03 01:25:01

问题:

I am using Flask (based on Werkzeug) which uses Python.

The user can download a file, I'm using the send_from_directory-function.

However when actually downloading the file, the HTTP header content-length is not set. So the user has no idea how big the file being downloaded is.

I can use os.path.getsize(FILE_LOCATION) in Python to get the file size (in bytes), but cannot find a way to set the content-length header in Flask.

Any ideas?

回答1:

I believe you'd do something like this (untested):

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

See: Werkzug's Headers object and Flask's Response object.



回答2:

I needed this also, but for every requests, so here's what I did (based on the doc) :

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


回答3:

Since version 0.6 the canonical way to add headers to a response object is via the make_response method (see Flask docs).

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!