2010-09-28 14 views
16

Sto usando Flask (basato su Werkzeug) che usa Python.Flask/Werkzeug come allegare l'intestazione di lunghezza del contenuto HTTP al file download

L'utente può scaricare un file, sto usando il send_from_directory-function.

Tuttavia, durante il download del file, l'intestazione HTTP content-length non è impostata. Quindi l'utente non ha idea di quanto sia grande il file che si sta scaricando.

Posso usare os.path.getsize(FILE_LOCATION) in Python per ottenere la dimensione del file (in byte), ma non riesco a trovare un modo per impostare l'intestazione content-length in Flask.

Qualche idea?

risposta

10

credo che avresti fatto qualcosa di simile (non testata):

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

See: Werkzug's Headers object e Flask's Response object.

36

Dalla versione 0.6 il modo canonico per aggiungere intestazioni a un oggetto risposta è tramite il metodo make_response (vedere Flask docs).

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

ho bisogno anche questo, ma per ogni richiesta, ecco quello che ho fatto (sulla base del doc):

@app.after_request 
def after_request(response): 
    response.headers.add('Access-Control-Allow-Origin', '*') 
    return response 
Problemi correlati