我正在嘗試通過 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!')
}
uj5u.com熱心網友回復:
Content-Type 是一種特殊的元資料,歸類為系統定義的元資料,還有其他方法可以更新它。它是根據物件創建/上傳時的內容派生的。
假設您要更新系統定義的 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 來更新內容型別。不需要使用元資料 json 來更新此引數。使用元資料 json 更新其他用戶定義的引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/470562.html
下一篇:angularaws-sdk-對預檢請求的回應未通過訪問控制檢查:資源上不存在“Access-Control-Allow-Origin”標頭