Flask/Werkzeug Como anexar o cabeçalho de comprimento de conteúdo HTTP ao download do arquivo
-
26-09-2019 - |
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?
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