Flask / Werkzeug comment attacher en-tête de longueur du contenu HTTP pour télécharger le fichier

StackOverflow https://stackoverflow.com/questions/3811595

Question

J'utilise Flask (basé sur Werkzeug) qui utilise Python.

L'utilisateur peut télécharger un fichier, j'utilise le send_from_directory -fonction.

Cependant lors du téléchargement du fichier en fait, l'en-tête HTTP content-length est pas défini. Ainsi, l'utilisateur n'a aucune idée de la taille du fichier en cours de téléchargement est.

Je peux utiliser os.path.getsize(FILE_LOCATION) en Python pour obtenir la taille du fichier (en octets), mais ne peut pas trouver un moyen de définir l'en-tête de content-length dans Flask.

Toutes les idées?

Était-ce utile?

La solution

Je crois que vous feriez quelque chose comme ça (non testé):

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

Voir: en-têtes Werkzug objet et objet Response Flask.

Autres conseils

Depuis la version 0.6 la manière canonique pour ajouter des en-têtes à un objet de réponse est par la méthode make_response (voir Flask docs ).

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

Je avais besoin cela aussi, mais pour toutes les demandes, alors voici ce que je faisais (sur la base du document):

@app.after_request
def after_request(response):
    response.headers.add('Access-Control-Allow-Origin', '*')
    return response
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top