将文件从 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.Bucket
, s3.Bucket.Object
, s3.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)
警告:gcs
位是伪代码,我不熟悉它们的 API。
编辑:
所以似乎 gcs
支持旧版本的 S3 API 以及旧版本的签名者。我们仍然支持那个老签名者,但你必须选择加入。请注意,某些区域不支持旧的签名版本(您可以查看哪些 S3 区域支持哪些版本的列表 here),因此如果您尝试复制到其中一个,则需要使用不同的客户。
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)
当然,这仅在假设 gcs
仍然符合 S3 的情况下才有效。
我想将文件从 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.Bucket
, s3.Bucket.Object
, s3.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)
警告:gcs
位是伪代码,我不熟悉它们的 API。
编辑:
所以似乎 gcs
支持旧版本的 S3 API 以及旧版本的签名者。我们仍然支持那个老签名者,但你必须选择加入。请注意,某些区域不支持旧的签名版本(您可以查看哪些 S3 区域支持哪些版本的列表 here),因此如果您尝试复制到其中一个,则需要使用不同的客户。
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)
当然,这仅在假设 gcs
仍然符合 S3 的情况下才有效。