Boto3:问题将大文件的元数据从一个存储桶复制到另一个存储盒



当文件大小大于等于10MB时,不会复制元数据。当将对象从一个s3 bucket复制到另一个s3 bucket时,文件复制成功,但当文件大小大于10MB时,元数据将丢失。

import boto3
s3 = boto3.resource('s3')
source_bucket = {'Bucket':'s3bucket1','Key':'app/a.xml'}
s3.meta.client.copy(source_bucket,'targets3bucket','app/a.xml')

使用copy_from确保元数据得到保留。当将对象从一个存储桶(旧存储桶(复制到另一个存储盒(新存储桶(时,有一个函数可以做到这一点:

def copy_object_from_old_to_new_bucket(
s3_key: str,
old_bucket: service_resource.Bucket,
new_bucket: service_resource.Bucket,
) -> None:
"""
Move an object from the old to the new bucket.
"""
# Select the new location of the object (s3_key doesn't have to exist).
target_object = new_bucket.Object(s3_key)
# Copy the message.
target_object.copy_from(
CopySource=f"{old_bucket.name}/{s3_key}",
MetadataDirective="COPY",
)

供参考:

  • 这里有一个github错误也提到了这一点
  • AWS关于复制对象的文档
  • 复制文档(_F(

最新更新