如何更改 AWS S3 中的系统元数据
How to Change System Metadata in AWS S3
我正在尝试通过 lambda 更改 s3 存储桶中图像的元数据,上传对象时会触发此 lambda。但出于某种原因,当我通过 copy_from 更新元数据时,它会添加用户元数据而不是系统元数据,如下所示:
是否有编辑系统元数据的特殊方法?我的代码是:
import json
import boto3
import urllib
s3 = boto3.resource('s3')
def lambda_handler(event, context):
# TODO implement
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'])
s3_object = s3.Object(bucket, key)
s3_object.metadata.update({'Content-Type':'image/png'})
s3_object.copy_from(CopySource={'Bucket':bucket, 'Key':key}, Metadata=s3_object.metadata, MetadataDirective='REPLACE')
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
Content-Type是属于系统定义元数据的特殊元数据,还有其他更新方式。是created/uploaded.
时根据对象的内容推导出来的
假设您要更新系统定义的 Content-Type 元数据。尝试使用此代码,它更新系统定义的元数据并添加用户定义的元数据:
s3_object.metadata.update({'My-Metadata':'abc'})
s3_object.copy_from(CopySource={'Bucket':BUCKET_NAME, 'Key':OBJECT_KEY}, ContentType='image/png', Metadata=s3_object.metadata, MetadataDirective='REPLACE')
正如您在此处看到的,copy_from 明确采用参数 ContentType 来更新 content-type。不需要使用元数据 json 来更新此参数。使用元数据 json 更新 其他 用户定义的参数。
我正在尝试通过 lambda 更改 s3 存储桶中图像的元数据,上传对象时会触发此 lambda。但出于某种原因,当我通过 copy_from 更新元数据时,它会添加用户元数据而不是系统元数据,如下所示:
是否有编辑系统元数据的特殊方法?我的代码是:
import json
import boto3
import urllib
s3 = boto3.resource('s3')
def lambda_handler(event, context):
# TODO implement
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'])
s3_object = s3.Object(bucket, key)
s3_object.metadata.update({'Content-Type':'image/png'})
s3_object.copy_from(CopySource={'Bucket':bucket, 'Key':key}, Metadata=s3_object.metadata, MetadataDirective='REPLACE')
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
Content-Type是属于系统定义元数据的特殊元数据,还有其他更新方式。是created/uploaded.
时根据对象的内容推导出来的假设您要更新系统定义的 Content-Type 元数据。尝试使用此代码,它更新系统定义的元数据并添加用户定义的元数据:
s3_object.metadata.update({'My-Metadata':'abc'})
s3_object.copy_from(CopySource={'Bucket':BUCKET_NAME, 'Key':OBJECT_KEY}, ContentType='image/png', Metadata=s3_object.metadata, MetadataDirective='REPLACE')
正如您在此处看到的,copy_from 明确采用参数 ContentType 来更新 content-type。不需要使用元数据 json 来更新此参数。使用元数据 json 更新 其他 用户定义的参数。