繁体   English   中英

将文件从gcs复制到boto3中的s3

[英]copy file from gcs to s3 in boto3

我希望将文件从gcs复制到我的s3存储桶。 在boto2中,轻松按钮。

conn = connect_gs(user_id, password)
gs_bucket = conn.get_bucket(gs_bucket_name) 
for obj in bucket:
   s3_key = key.Key(s3_bucket)
   s3_key.key = obj
   s3_key.set_contents_from_filename(obj)

但是在boto3中,我试图找到相同的代码。 任何接受者?

如果你所做的只是一个副本:

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('bucket-name')
for obj in gcs:
    s3_obj = bucket.Object(gcs.key)
    s3_obj.put(Body=gcs.data)

文档: s3.Buckets3.Bucket.Objects3.Bucket.Object.put

或者,如果您不想使用资源模型:

import boto3

s3_client = boto3.client('s3')
for obj in gcs:
    s3_client.put_object(Bucket='bucket-name', Key=gcs.key, Body=gcs.body)

文档: s3_client.put_object

警告: gcs位是伪代码,我不熟悉它们的API。

编辑:

因此,似乎gcs支持旧版本的S3 API以及旧版本的签名者。 我们仍然支持那位老签名者,但你必须选择加入。 请注意,某些区域不支持旧的签名版本(您可以在此处查看哪些S3区域支持哪些版本的列表),因此,如果您尝试复制到其中一个版本,则需要使用其他客户端。

import boto3
from botocore.client import Config

# Create a client with the s3v2 signer
resource = boto3.resource('s3', config=Config(signature_version='s3'))
gcs_bucket = resource.Bucket('phjordon-test-bucket')
s3_bucket = resource.Bucket('phjordon-test-bucket-tokyo')
for obj in gcs_bucket.objects.all():
    s3_bucket.Object(obj.key).copy_from(
        CopySource=obj.bucket_name + "/" + obj.key)

文档: s3.Object.copy_from

当然,这只会假设gcs仍然符合S3标准。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM