Flask / Werkzeug comment attacher en-tête de longueur du contenu HTTP pour télécharger le fichier
-
26-09-2019 - |
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?
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