2016-10-11 167 views
1

我試圖刪除的S3的項目列表,但注意到,從API調用的響應似乎並不正確:不正確JSON響應刪除

根據API的response應該包含刪除名單隻有在這種情況:

刪除

一個成功刪除容器元素。它標識已成功刪除的 對象。

兒童:重點,VERSIONID

類型:集裝箱

祖先:DeleteResult

delete_json是:

{ 
    'Objects':[ 
     { 
     'Key':'test1' 
     }, 
     { 
     'Key':'test2' 
     }, 
     { 
     'Key':'test3' 
     }, 
     { 
     'Key':'test4' 
     } 
    ], 
    'Quiet':False 
} 

Python代碼刪除:

response = self.client.delete_objects(Bucket=s3_bucket, Delete=delete_json) 

和反應是:

{ 
    'Deleted':[ 
     { 
     'DeleteMarkerVersionId':'null', 
     'Key':'test1', 
     'DeleteMarker':True 
     }, 
     { 
     'DeleteMarkerVersionId':'null', 
     'Key':'test2', 
     'DeleteMarker':True 
     }, 
     { 
     'DeleteMarkerVersionId':'null', 
     'Key':'test3', 
     'DeleteMarker':True 
     }, 
     { 
     'DeleteMarkerVersionId':'null', 
     'Key':'test4', 
     'DeleteMarker':True 
     } 
    ], 
    'ResponseMetadata':{ 
     'HostId':'JDl4XNrK02lfBLXCDDIJjuPXG6tOovOp0dtCv7eMlHc0hGC2L7eSV/wb/XRBFyYQ9mHHzb0O/Yg=', 
     'HTTPStatusCode':200, 
     'RequestId':'2F2A9FAE7F906B8' 
    } 
} 

它是一個錯誤嗎?

+0

這是一個版本化存儲桶,或者是之前版本過的存儲桶,但現在版本掛起了? –

+0

其標記爲「版本控制當前已暫停在此存儲桶中」。 ,它會影響嗎? – infinityLoop

+0

除非我的評論只是一個幸運的猜測:)那麼它就很重要。我會試着解釋。 –

回答

1

正如您在評論中確認的那樣,此存儲桶啓用了版本控制功能,隨後被暫停。

這與從未啓用版本控制的存儲桶不同。一旦某個存儲桶啓用了版本控制,它將始終是一個版本控制的存儲桶,但新對象的版本控制行爲,覆蓋和刪除操作是不同的。

從API文檔,頁面引用您:

因爲版本上鬥啓用,亞馬遜S3不會刪除對象。相反,它會爲此對象添加一個刪除標記。響應表明添加了一個刪除標記(響應中的DeleteMarker元素值爲true)以及它添加的刪除標記的版本號。

獲取該信息,然後添加在版本暫停時必須遵循的行爲。刪除標記的版本號爲空,因爲這是刪除標記在暫停存儲桶版本中的工作方式。刪除標記替代對象的null版本(如果存在),並假定其自身的ID爲null

http://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectsfromVersioningSuspendedBuckets.html

它也遵循你的刪除操作實際上可能沒有刪除了所需的對象,如果它是不是對象的空版本。該對象只會顯示已被刪除。

API響應似乎是正確的。