删除对象

删除单个对象

def delete_object():
    try:
        resp = s3_client.delete_object(
            Bucket='YOUR_BUCKET_NAME',
            Key='workflow.png',
        )
        print(resp)
    except ClientError as e:
        logging.error(e)

删除多个对象

delete_object操作可以实现通过一个HTTP请求批量删除多个对象的功能,可以减少发起多个请求去删除大量对象的花销。delete_object操作发起一个包含了最多1000个key的删除请求,媒体存储服务会对相应的对象逐个进行删除,并且将删除成功或者失败的结果通过response返回。如果请求删除的对象不存在,会返回已删除的结果。

delete_object操作返回包含verbose 和quiet两种response模式。verbose response是默认的返回模式,该模式的返回结果包含了每个key的删除结果。quiet response返回模式返回的结果仅包含了删除失败的key,对于一个完全成功的删除操作,该返回模式不在相应消息体中返回任何信息。

如果对一个启用了MFADelete的存储桶执行delete_object操作,需要在请求参数中提供正确的MFA 信息,否则整个删除操作将不能被有效执行,这规则同样适用于删除那些没有启用版本控制的对象。

def delete_objects():
    try:
        resp = s3_client.delete_objects(
            Bucket='YOUR_BUCKET_NAME',
            Delete={
                'Objects': [
                    {
                        'Key': 'workflow.png',
                    },
                    {
                        'Key': 'workflow2.png',
                    },
                ],
            },
        )
        print(resp)
    except ClientError as e:
        logging.error(e)

删除指定版本的对象

默认情况下,如果开启了版本控制,使用 delete_object 操作删除对象不会将该对象彻底删除,而是添加一个 Delete Marker 作为标识。如果您确定不再需要某个对象,则在删除中携带该对象的版本号(VersionId),可以将其彻底删除。对象的版本号可以通过 __list_object_versions__接口获取。

def delete_object():
    try:
        resp = s3_client.delete_object(
            Bucket='YOUR_BUCKET_NAME',
            Key='workflow.png',
            VersionId='kSdvghSnOmpSMeFtGkeGRXabQCx.RVY', #具体的VersionId
        )
        print(resp)
    except ClientError as e:
        logging.error(e)