Метод stream
Метод stream применяется к объекту запроса
Request и возвращает асинхронный итератор
для чтения тела запроса по частям.
Этот метод особенно полезен при обработке больших
файлов или потоковых данных, когда загружать всё
тело запроса в память сразу нежелательно.
Метод не принимает обязательных параметров.
Возвращает объект AsyncIterator[bytes],
который выдаёт фрагменты тела запроса по мере
их поступления.
Синтаксис
async for chunk in request.stream():
# process chunk
Пример
Давайте прочитаем тело запроса в виде потока и посчитаем общее количество полученных байтов:
from fastapi import FastAPI, Request
app = FastAPI()
@app.post('/upload')
async def upload(request: Request):
total = 0
async for chunk in request.stream():
total += len(chunk)
return {'bytes': total}
Результат выполнения кода при отправке строки
'abcde':
{"bytes": 5}
Пример
Давайте накопим все фрагменты потока в один байтовый объект и вернём его длину:
from fastapi import FastAPI, Request
app = FastAPI()
@app.post('/collect')
async def collect(request: Request):
data = b''
async for chunk in request.stream():
data += chunk
return {'length': len(data)}
Результат выполнения кода при отправке строки
'article':
{"length": 7}