Pergunta

Estou usando o Flask (baseado em Werkzeug), que usa Python.

O usuário pode baixar um arquivo, estou usando o send_from_directory-função.

No entanto, ao realmente baixar o arquivo, o cabeçalho HTTP content-length não está definido. Portanto, o usuário não tem idéia do tamanho do arquivo que está sendo baixado.

Eu posso usar os.path.getsize(FILE_LOCATION) em python para obter o tamanho do arquivo (em bytes), mas não consegue encontrar uma maneira de definir o content-length Cabeçalho no frasco.

Alguma ideia?

Foi útil?

Solução

Eu acredito que você faria algo assim (não testado):

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

Ver: Objeto de cabeçalhos de Werkzug e Objeto de resposta do Flask.

Outras dicas

Desde a versão 0.6, a maneira canônica de adicionar cabeçalhos a um objeto de resposta é através do make_response Método (ver Documentos de frasco).

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

Eu também precisava disso, mas para todos os pedidos, então aqui está o que fiz (com base no documento):

@app.after_request
def after_request(response):
    response.headers.add('Access-Control-Allow-Origin', '*')
    return response
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top