Использование BytesIO и Flask send_file - PullRequest
0 голосов
/ 02 октября 2019

Мне нужно обработать XML-файл и отправить его обратно, сохраняя все в памяти. Я пытался использовать BytesIO в качестве файлового объекта. Первоначально я попытался это:

with BytesIO() as file:
    data.write(file, encoding='windows-1251')
    return send_file(file,attachment_filename='output.xml',as_attachment=True)

, что привело к следующей ошибке:

Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/werkzeug/wsgi.py", line 580, in __next__
    data = self.file.read(self.buffer_size)
ValueError: I/O operation on closed file.

Однако, когда я делаю это:

with BytesIO() as file:
    data.write(file, encoding='windows-1251')
    file.seek(0)
    return send_file(BytesIO(file.read()),attachment_filename='output.xml',as_attachment=True)

Все работаетхорошо. Может кто-нибудь объяснить мне, в чем проблема с первым и почему работает вторая попытка?

...