Flask/Werkzeug how to attach HTTP content-length header to file download
-
26-09-2019 - |
Question
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?
Solution
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)))
OTHER TIPS
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
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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow