Flask / Werkzeug, как прикрепить заголовок длины содержимого HTTP к файлу загрузки - PullRequest
16 голосов
/ 28 сентября 2010

Я использую Flask (на основе Werkzeug), который использует Python.

Пользователь может загрузить файл, я использую send_from_directory -функцию .

Однако при фактической загрузке файла заголовок HTTP content-length не устанавливается.Таким образом, пользователь не знает, насколько велик загружаемый файл.

Я могу использовать os.path.getsize(FILE_LOCATION) в Python для получения размера файла (в байтах), но не могу найти способ установить заголовок content-lengthв колбе.

Есть идеи?

Ответы [ 3 ]

38 голосов
/ 28 марта 2012

Мне это тоже нужно было, но для каждого запроса, вот что я сделал (основываясь на документации):

@app.after_request
def after_request(response):
    response.headers.add('Access-Control-Allow-Origin', '*')
    return response
37 голосов
/ 18 февраля 2012

Начиная с версии 0.6 каноническим способом добавления заголовков к объекту ответа является метод make_response (см. Документы Flask ).

def index():
    response = make_response(render_template('index.html', foo=42))
    response.headers['X-Parachutes'] = 'parachutes are cool'
    return response
11 голосов
/ 28 сентября 2010

Я полагаю, вы бы сделали что-то вроде этого (не проверено):

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

См .: Объект заголовков Веркзуга и Объект ответа Колбы .

...