使用Python将字节流写入S3

12

我有一个存储在内存中的zip文件(未将其保存在磁盘上)。该zip文件包含jpg图像。我试图将每个jpg上传到S3,但遇到了错误。

# 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 不支持分块传输

我做错了什么?


请查看此问题 - loopbackbee
@goncalopp 啊。我不想先将图像保存到磁盘上,如何将内存中的文件上传到S3?- 谢谢 - IUnknown
1
你知道数据的大小吗?S3不支持分块编码,因此您必须在请求中提供正确的“ContentLength”头。 - garnaat
2个回答

7

这里有一个解决方案。我之前想得太多了。

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)

那只需要这些。

2

嗯,这似乎是一个严重的限制,被迫在上传到S3之前将图像保存到磁盘。这是正确的吗?我不能直接从内存中将图像保存到S3吗? - IUnknown
如果您的所有数据都在内存中的字符串中,您可以使用set_contents_from_string。 - Charles Engelke
4
啊,既然我在内存中有jpg图像,那么在Python中使用set_contents_from_string将它们写入S3作为jpg文件的推荐方法是什么?谢谢。 - IUnknown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接