删除标记(Delete Marker)是用于受版本控制的对象(Object)的占位符, 即DELETE请求中命名的标记符。
删除标记与Object的差异
与其他任何Object一样,删除标记同样有文件名称(Key) 和版本ID,但删除标记在以下方面与其他Object不同:
没有关联的数据。
没有关联的访问控制列表(ACL)值。
由于删除标记不包含数据,因此GET请求检索不到任何内容。如果Object的当前版本为删除标记,则对该Object发起GET请求时会返回404错误。
仅具有
oss:DeleteObjectVersion
权限的RAM用户才能对删除标记执行DELETE操作。
对已开启版本控制或已暂停版本控制的Bucket中的Object发送DeleteObject请求时,OSS将为Object创建删除标记。如果在DeleteObject请求中未指定Object的版本ID,则不会删除Object ,而是创建删除标记作为Object的当前版本。
无法直接删除已开启版本控制的Bucket中的Object ,但删除标记可以将Object视为已删除。
如何删除“删除标记”
以下内容介绍如何在已开启版本控制的Bucket中删除“删除标记”。
如果在DeleteObject请求中未指定删除标记的版本ID,则OSS不会删除“删除标记”,而是插入删除标记作为Object的当前版本。删除标记可以进行累积,如下图所示。
在已开启版本控制的Bucket中,相同的Object可能有多个删除标记,且删除标记将对应唯一的版本ID。
如果在DeleteObject请求中指定版本ID ,则该指定版本的Object将被永久删除,如下图所示(即删除versionId=333333的删除标记,versionId=222222的版本成为Object的当前版本)。
您可以通过Java SDK、Python SDK、PHP SDK、Node.js SDK、.NET SDK、Go SDK、C++ SDK删除指定版本Object及其删除标记。