删除对象
- 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 | 操作指定的桶不存在。 |