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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top