На моем сервере Google App Engine на базе Flask я пытаюсь вернуть ответ с заголовком «длина содержимого», который будет содержать окончательный размер большого двоичного объекта, который будет передан клиенту. Этот большой двоичный объект представляет собой большой мультимедийный файл, поэтому этот заголовок будет использоваться для установки максимального значения индикатора выполнения на интерфейсе пользовательского интерфейса. Этот BLOB-объект находится в облачном хранилище, но использует API хранилища BLOB-объектов из пакетов App Engine для извлечения BLOB-объектов. Ниже возвращается с кодом состояния 200
:
response.headers['Content-length'] = blobstore.BlobInfo(version.blob_key).size
return response
Он принимается с использованием пакета Requests и выполняет потоковую передачу получаемых данных ( Это нормально, поскольку все заголовки принимаются в объекте Response
перед передачей данных. начинается потоковое вещание ). Мой код выглядит примерно так:
with requests.get(url='/api/download', stream=True) as r:
print(r.headers)
Однако заголовок Content-length
не установлен. Вместо этого я получаю нечто подобное из print()
выше:
{'Cache-Control': 'no-cache',
'Content-Type': 'text/plain; charset=utf-8',
'X-Cloud-Trace-Context': '1bca54f9cdae7394de6cb2f1e824ba6f',
'Transfer-Encoding': 'chunked',
'Date': 'Thu, 26 Apr 2018 11:36:17 GMT',
'Server': 'Google Frontend'}
Я заметил из этого поста , что App Engine удаляет заголовок длины содержимого и заменяет его на правильный размер, но я не получаю заголовок длины содержимого для начала. Что я делаю неправильно? Я неправильно подаю клиенту блоб? Является ли длина содержимого просто недоступной и не может быть установлена? Если да, как я могу получить размер файла, чтобы я мог вычислить размер моего индикатора выполнения пользовательского интерфейса?