Потоковая передача файла из S3 в многочастную конечную точку HTTPPython

Программы на Python
Anonymous
Потоковая передача файла из S3 в многочастную конечную точку HTTP

Сообщение Anonymous »


Я пытаюсь передать большой файл из корзины S3 в HTTP API. Я прочитал много тем SO, частично отвечающих моим потребностям, но не смог собрать все воедино.

Локальное чтение файла осуществляется с помощью панели инструментов запроса:

stream = open('/tmp/file', 'rb') кодер = MultipartEncoder( {'attachments': ('файл', поток, 'приложение/октет-поток'), 'canRename': 'true'} ) заголовки['Content-Type'] = encoder.content_type r = Requests.post(f'/api/attachments', data=encoder, headers=headers) печать (r.text) Но чтение потока из S3 этого не делает:

obj = s3_client.get_object(Bucket='bucket', Key='key') поток = объект ['Тело'] кодер = MultipartEncoder( {'attachments': ('файл', поток, 'приложение/октет-поток'), 'canRename': 'true'} ) заголовки['Content-Type'] = encoder.content_type r = Requests.post(f'/api/attachments', data=encoder, headers=headers) печать (r.text) self = объект

return total_len(self.fd) - self.fd.tell()

E TypeError: неподдерживаемые типы операндов для -: 'NoneType' и 'int'

Я также пытался обернуть поток разными типами, но безуспешно:
stream = StreamingIterator(obj['ContentLength'], obj['Body']) # передает данные, но зависает навсегда поток = io.BufferedReader(obj['Body']._raw_stream, obj['ContentLength']) # приводит к сбою encoder.CustomBytesIO при вычислении общей длины

Вернуться в «Python»