使用python将字节流写入s3

使用python将字节流写入s3,python,amazon-web-services,amazon-s3,boto,Python,Amazon Web Services,Amazon S3,Boto,我将一个zip文件加载到内存中(不要将其保存在磁盘上)。zip文件包含jpg图像。我试图上传到s3的每个jpg,但得到一个错误 # already have an opened zipfile stored in zip_file # already connected to s3 files = zip_file.namelist() for f in files: im = io.BytesIO(zip_file.read(f)) s3_key.key = f s

我将一个zip文件加载到内存中(不要将其保存在磁盘上)。zip文件包含jpg图像。我试图上传到s3的每个jpg,但得到一个错误

# already have an opened zipfile stored in zip_file
# already connected to s3

files = zip_file.namelist()

for f in files:
    im = io.BytesIO(zip_file.read(f))
    s3_key.key = f
    s3_key.set_contents_from_stream(im)
我得到以下错误:

BotoClientError:BotoClientError:s3不支持分块传输


我做错了什么?

除了S3之外,Boto还支持其他存储服务,如谷歌云存储。set_contents_from_stream方法仅适用于支持分块传输的服务(请参阅)。S3不支持这一点(请参阅他们的技术常见问题。)


不幸的是,您无法从流上传到S3。

以下是解决方案。我想得太多了

files = zip_file.namelist()

for f in files:
    data = zip_file.read(f)
    s3_key._key.key = f
    s3_key._key.set_contents_from_string(data)

仅此而已。

请参阅@goncalopp-ahh。我不想先将映像保存到磁盘,如何将内存中的文件上载到s3你知道数据的大小吗?S3不支持分块编码,因此您必须在request.hmmm中提供正确的
ContentLength
头,这似乎是一个严重的限制,在上载到S3之前,必须将图像保存到磁盘。是这样吗,我无法将图像从内存保存到s3?如果所有数据都在内存中的字符串中,则可以使用set_contents_from_string。啊,既然我在内存中有jpg,在python中,建议使用set_contents_from_string将它们作为jpg文件写入s3的方式是什么?谢谢。