Kolben / Werkzeug, wie HTTP-Content-Length-Header auf Datei-Download anhängen
-
26-09-2019 - |
Frage
Ich bin mit Flask (basierend auf Werkzeug), den Python verwendet.
Der Benutzer kann eine Datei herunterladen, ich bin mit dem send_from_directory
-function .
Allerdings, wenn tatsächlich die Datei herunterzuladen, die HTTP-Header content-length
nicht gesetzt ist. So hat der Benutzer keine Ahnung, wie groß die Datei heruntergeladen werden.
Ich kann os.path.getsize(FILE_LOCATION)
in Python verwenden, um die Dateigröße zu erhalten (in Bytes), kann aber nicht einen Weg finden, den content-length
Header in Flask zu setzen.
Irgendwelche Ideen?
Lösung
Ich glaube, Sie so etwas tun würde (nicht getestet):
from flask import Response
response = Response()
response.headers.add('content-length', str(os.path.getsize(FILE_LOCATION)))
Siehe auch: Werkzug des Headers Objekt und Flask des Response-Objekt .
Andere Tipps
Seit der Version 0.6 ist die kanonische Weise Header zu einem Antwortobjekt hinzuzufügen über die make_response
Methode ist (siehe Flask docs ).
def index():
response = make_response(render_template('index.html', foo=42))
response.headers['X-Parachutes'] = 'parachutes are cool'
return response
brauchte ich dies auch, aber für alle Anfragen, also hier ist was ich getan habe (auf der doc-basiert):
@app.after_request
def after_request(response):
response.headers.add('Access-Control-Allow-Origin', '*')
return response