這是我無法繞到我的頭,只是還沒有一件奇怪的事情。爲什麼當我使用Boto3將一個「expires」日期時間放在put_object放入AWS S3的對象上時,它會被存儲並顯示在AWS Cosnole中作爲「元數據」。但是,當我檢索對象時,我的「expires」datetime顯示爲對象的日期時間元素,而不是元數據字典中的日期時間元素。已有對象的Boto3 S3更新元數據
這個問題困擾了我,但我的工作圍繞它不理解它。現在它來了,我認爲使用這種方法:How to update metadata of an existing object in AWS S3 using python boto3?被複制以下爲了便於閱讀:
import boto3
s3 = boto3.resource('s3')
s3_object = s3.Object('bucket-name', 'key')
s3_object.metadata.update({'id':'value'})
s3_object.copy_from(
CopySource={'Bucket':'bucket-name', 'Key':'key'},
Metadata=s3_object.metadata, MetadataDirective='REPLACE')
導致我的「過期」元數據被破壞。當然,我想這:
metakeys.metadata.update({'x-amz-meta-hell':'yes', 'expires': metakeys.expires})
但拋出:AttributeError的:「datetime.datetime」對象有沒有屬性「編碼」
這是事實,你可以有效地更新元數據不破壞「過期「元素通過控制檯。因此,在某種程度上,我建議上面的方法是A:不可行或不正確,B:破碎,或C:破碎且不正確
問題是 - 什麼是更新元數據的正確方法一個對象沒有破壞AWS S3對象的這種或將來的奇怪行爲?
這是我在使用該通話體驗是一致的。然而,更多的涉及到,那就是我的「過期」的標籤被改寫 CopySource = {「鬥」:「鬥名」,「重點」:「鍵」}, 元= s3_object.metadata,MetadataDirective ='REPLACE ') AND我的「expires」標籤也被覆蓋 CopySource = {'Bucket':'bucket-name','Key':'key'}, Metadata = s3_object.metadata,MetadataDirective ='COPY') 對我來說;因爲我正在更新用戶元數據,所以上述任何一個命令都不應該導致「過期」被覆蓋,但它們會這樣做。 –
@ Trip-G我不確定你的「覆蓋」的含義。 s3.copy_from()不應該改變你的SOURCE對象。它將對TARGET對象進行更改。 – mootmoot