Потоковая передача файла из S3 в многочастную конечную точку HTTP ⇐ Python
-
Anonymous
Потоковая передача файла из S3 в многочастную конечную точку HTTP
Я пытаюсь передать большой файл из корзины 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 при вычислении общей длины
Я пытаюсь передать большой файл из корзины 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 при вычислении общей длины