2010-09-28 3 views
16

J'utilise Flask (basé sur Werkzeug) qui utilise Python. L'utilisateur peut télécharger un fichier, j'utilise send_from_directory-function.Flask/Werkzeug comment attacher l'en-tête de longueur de contenu HTTP au téléchargement de fichier

Toutefois, lors du téléchargement du fichier, l'en-tête HTTP content-length n'est pas défini. L'utilisateur n'a donc aucune idée de la taille du fichier téléchargé.

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

Des idées?

Répondre

10

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: Werkzug's Headers object et Flask's Response object.

36

Depuis la version 0.6, la méthode canonique pour ajouter des en-têtes à un objet de réponse est via 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 
38

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 
Questions connexes