删除对象

  • DeleteObject

DeleteObject操作用于删除一个object。对于开启版本控制的Bucket执行 delete_object操作时,如果未指定versionId ,则保留对象的当前版本,并插入删除标记(Delete Marker)。如果指定versionId,则永久删除该指定版本ID的对象。如果在未指定versionId的情况下执行DeleteObject操作时,默认仅作用于对象的当前版本,但不会直接删除该对象的当前版本,而是插入一个删除标记(Delete Marker),并保留原来的当前版本。当执行GetObject操作时,OSS会检测到当前版本为删除标记,并返回404 Not Found。

代码示例:

// 删除一个对象
func DeleteObject(svc *s3.S3) {
    deleteObjectInput := &s3.DeleteObjectInput{
        Bucket: aws.String("exampleBucket"),
        Key:    aws.String("exampleKey"),
    }

    deleteObjectOutput, err := svc.DeleteObject(deleteObjectInput)
    if err != nil {
        fmt.Printf("Failed to delete object. %v\n", err)
    } else {
        fmt.Println(deleteObjectOutput)
    }
}

DeleteObjectInput可设置的参数如下:

参数 类型 说明 是否必要
Bucket *string 执行本操作的桶名称。
Key *string 对象的key。
VersionId *string 用于指定要删除对象的versionId

DeleteObjectOutput返回的属性如下:

参数 类型 说明
DeleteMarker *bool 有效值为true。在桶开启版本控制的情况下,执行DeleteObject 操作时如果未指定对象的版本Id,OSS会创建删除标记,此时DeleteMarker为true。如果指定对象的版本Id来永久删除指定对象版本时,若该版本Id是删除标记,则DeleteMarker为true。
VersionId *string 执行DeleteObject操作时如果未指定对象的版本Id,OSS会创建删除标记,VersionId为删除标记的版本Id。 如果指定版本Id来永久删除对象指定版本时,返回的VersionId为对象的版本Id。
  • DeleteObjectRequest

DeleteObjectRequest操作首先生成一个"request.Request"对象,该对象是一个执行DeleteObject操作的请求。通过调用Request对象的Send方法完成删除对象的操作。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

代码示例:

func DeleteObjectRequest(svc *s3.S3) {
    deleteObjectInput := &s3.DeleteObjectInput{
        Bucket: aws.String("exampleBucket"),
        Key:    aws.String("exampleKey"),
    }
    req, resp := svc.DeleteObjectRequest(deleteObjectInput)

    err := req.Send()
    if err != nil {
        fmt.Printf("fail to delete object. %v\n", err)
    } else {
        fmt.Println(resp)
    }
}

响应结果:

HTTP状态 响应码 描述
204 NoContent 操作成功。
403 AccessDenied 用户没有权限执行操作。
404 NoSuchBucket 操作指定的桶不存在。