Frasco / Werkzeug cómo adjuntar cabecera HTTP Content-Length para descarga de archivos
-
26-09-2019 - |
Pregunta
Estoy usando Frasco (basado en Werkzeug), que utiliza Python.
El usuario puede descargar un archivo, estoy usando el send_from_directory
-Función .
Sin embargo, cuando en realidad la descarga del archivo, el encabezado HTTP content-length
no está ajustado. Por lo que el usuario no tiene idea de lo grande que es el archivo que se descarga es.
Me puede utilizar os.path.getsize(FILE_LOCATION)
en Python para obtener el tamaño del archivo (en bytes), pero no puede encontrar una manera de establecer la cabecera content-length
en el frasco.
¿Alguna idea?
Solución
Creo que haría algo como esto (no probado):
from flask import Response
response = Response()
response.headers.add('content-length', str(os.path.getsize(FILE_LOCATION)))
Ver: de Werkzug encabezados objeto y frasco de objeto Respuesta .
Otros consejos
Desde la versión 0.6 de la forma canónica de añadir cabeceras a un objeto de respuesta es a través del método make_response
(ver Frasco docs ).
def index():
response = make_response(render_template('index.html', foo=42))
response.headers['X-Parachutes'] = 'parachutes are cool'
return response
Yo necesitaba esto también, pero por cada solicitud, así que aquí está lo que hice (basado en el doc):
@app.after_request
def after_request(response):
response.headers.add('Access-Control-Allow-Origin', '*')
return response