使用python将字节流写入s3

时间:2014-02-11 18:57:57

标签: python amazon-web-services amazon-s3 boto

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

我做错了什么?

2 个答案:

答案 0 :(得分: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)

这就是全部。

答案 1 :(得分:2)

除了S3之外,Boto还支持其他存储服务,例如Google Cloud Storage。 set_contents_from_stream方法仅适用于支持分块传输的服务(请参阅https://codereview.appspot.com/4515170)。 S3不支持(请参阅http://aws.amazon.com/articles/1109上的技术常见问题解答。)

很不幸,但您无法从流上传到S3。