Я пытаюсь записать в BytesIO частичный файл xls, чтобы передать клиенту файл Excel.
Проблема в том, что клиент получает только первые несколько строк (первая итерация выхода для объекта byteio)
Похоже, что save_to_memory добавляет байты EOF, хотя поток не должен закрываться
Пример кода:
import io
import pyexcel as pe
from aiohttp import web
async def get(request):
response = web.StreamResponse(headers={'Content-Disposition': 'inline; filename="myfile.xls"'})
await response.prepare(request)
response.content_type = 'multipart/x-mixed-replace;boundary=ffserver'
data = [1,2,3,4]
mem = io.BytesIO()
sheet = pe.Sheet(name='ids', colnames=['id'])
try:
for id in data:
sheet.extend_rows([id])
mem = sheet.save_to_memory("xls", mem)
await response.write(mem.read())
finally:
await response.write_eof()
, в этом случае клиент получит только строку со значением 1