标准扩展接口

终止分段上传

AbortMultipartUpload操作用于终止一个分段上传。当一个分段上传被中止后,不会再有数据通过与之相应的upload ID上传,同时已经被上传的片段所占用的空间会被释放。执行AbortMultipartUpload操作后,正在上传的片段可能会上传成功也可能会被中止,所以必要的情况下需要执行多次AbortMultipartUpload操作去释放全部上传成功的片段所占用的空间。可以通过执行ListParts操作来确认所有中止分段上传后所有已上传片段的空间是否被被释放。

代码示例:

// 终止分段上传
func AbortMultipartUpload(svc *s3.S3, bucket, key, uploadId string) {
    abortMultipartUploadInput := &s3.AbortMultipartUploadInput{
        Bucket:   aws.String("exampleBucket"),
        Key:      aws.String("exampleKey"),
        UploadId: aws.String("exampleUploadId"),
    }

    abortMultipartUploadOutput, err := svc.AbortMultipartUpload(abortMultipartUploadInput)
    if err != nil {
        fmt.Printf("fail to AbortMultipartUpload. %v\n", err)
        return
    }
    fmt.Println(abortMultipartUploadOutput)
}

AbortMultipartUploadInput可设置的参数如下:

参数 类型 说明 是否必要
Bucket string bucket的名称。
Key string 分段上传的对象的key。
UploadId string 指定需要终止的分段上传的id。

响应结果:

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

列出分段上传任务

ListMultipartUploads操作可以列出一个bucket中正在进行的分段上传,这些分段上传的请求已经发起,但是还没完成或者被中止。

// 列出正在进行的分段上传操作
func ListMultipartUploads(svc *s3.S3) {
    listMultipartUploadsInput := &s3.ListMultipartUploadsInput{
        Bucket: aws.String("exampleBucket"),
    }
    listMultipartUploadsOutput, err := svc.ListMultipartUploads(listMultipartUploadsInput)
    if err != nil {
        fmt.Printf("fail to list multipart uploads. %v\n", err)
        return
    }
    fmt.Println(listMultipartUploadsOutput)
}

ListMultipartUploadsInput可设置的参数如下:

参数 类型 说明 是否必要
Bucket *string 执行本操作的桶名称。
Delimiter *string 与Prefix参数一起用于对对象key进行分组的字符。所有key包含指定的Prefix且第一次出现Delimiter字符之间的对象作为一组。如果没有指定Prefix参数,按Delimiter对所有对象key进行分割,多个对象分割后从对象key开始到第一个Delimiter之间相同的部分形成一组。
EncodingType *string 用于设置response中object key的字符编码类型。
KeyMarker *string 和UploadIdMarker参数一起用于指定返回哪部分分段上传的信息。如果没有设置UploadIdMarker参数,则只返回对象key按照字典顺序排序后位于KeyMarker标识符之后的片段信息。如果设置了UploadIdMarker参数,则会返回对象key等于KeyMarker且UploadId大于UploadIdMarker的片段信息。
MaxUploads *int64 用于指定相应消息体中正在进行的分段上传信息的最大数量,最小值为1,默认值和最大值都是1000。
Prefix *string 与Delimiter参数一起用于对对象key进行分组的字符。所有key包含指定的Prefix且第一次出现Delimiter字符之间的对象作为一组。
UploadIdMarker *string 和KeyMarker参数一起用于指定返回哪部分分段上传的信息,仅当设置了KeyMarker参数的时候有效。设置后返回对象key等于KeyMarker且UploadId大于UploadIdMarker的片段信息。

ListMultipartUploadsOutput返回的属性如下:

参数 类型 说明
Bucket *string 执行本操作的桶名称。
CommonPrefixes []*CommonPrefix 当请求中设置了Delimiter和Prefix属性时,所有包含指定的Prefix且第一次出现Delimiter字符的对象key作为一组。
Delimiter *string 与请求中设置的Delimiter一致。
IsTruncated *bool 当为false时表示返回结果中包含了全部符合本次请求查询条件的上传片段信息,否则只返回了数量为MaxUploads个的片段信息。
KeyMarker *string 返回上传片段列表中的起始对象的key。
MaxUploads *int64 本次返回结果中包含的上传片段数量的最大值。
NextKeyMarker *string 当IsTruncated为true时,NextKeyMarker可以作为后续查询已初始化的上传片段请求中的KeyMarker的值。
NextUploadIdMarker *string 当IsTruncated为true时,NextKeyMarker可以作为后续查询已初始化的上传片段请求中的UploadIdMarker的值。
Prefix *string 限定返回片段中对应对象的key必须以Prefix作为前缀。
UploadIdMarker *string 返回上传片段列表中的起始UploadId。
Uploads []*MultipartUpload 包含了零个或多个已初始化的上传片段信息的数组。数组中的每一项包含了片段初始化时间、分段上传操作发起者、对象key、对象拥有者、存储类型和UploadId等信息。

列出已上传的片段

ListParts操作可以列出一个分段上传操作中已经上传完毕但是还未合并的片段信息。使用ListParts操作需要提供object key和upload id,返回的结果最多包含1000个已上传的片段信息,默认返回1000个,可以通过设置MaxParts参数的值指定返回结果中片段信息的数量。如果已上传的片段信息的数量多于1000个,则返回结果中的IsTruncated字段为true,可用通过设置PartNumberMarker参数获取PartNumber大于该参数的片段信息。

代码示例:

// 查询一个分段上传中已上传完成的片段信息
func ListParts(svc *s3.S3) {
    listPartsInput := &s3.ListPartsInput{
        Bucket:   aws.String("exampleBucket"),
        Key:      aws.String("exampleKey"),
        UploadId: aws.String("exampleUploadId"),
    }
    listPartsOutput, err := svc.ListParts(listPartsInput)
    if err != nil {
        fmt.Printf("fail to list parts. %v\n", err)
        return
    }
    fmt.Println(listPartsOutput)
}

ListPartsInput可设置的参数如下:

参数 类型 说明 是否必要
Bucket *string 执行本操作的桶名称。
Key *string 分段上传的对象的key。
MaxParts *int64 指定返回片段信息的数量,默认值和最大值均为1000。
PartNumberMarker *int64 用于指定返回part number大于PartNumberMarker的片段信息。
RequestPayer *string 确认请求者知道将为操作付费。Bucket所有者不需要在请求中指定这个参数。
UploadId *string 指定返回该id所属的分段上传的片段信息。

ListPartsOutput返回的属性如下:

参数 类型 说明
AbortDate *time.Time 如果桶配置了管理未完成的上传分段的生命周期管理规则,并且该规则对本次分段上传生效,则AbortDate返回表示终止本次分段上传的时间。
AbortRuleId *string 当返回结果中包含AbortDate属性时,AbortRuleId表示使终止本次分段上传操作生效的生命周期管理规则的Id。
Bucket *string 执行本操作的桶名称。
IsTruncated *bool 当为false时表示返回结果中包含了全部符合本次请求查询条件的上传片段信息,否则只返回了数量为MaxParts个的片段信息。
Key *string 本次分段上传对象的名称。
MaxParts *int64 本次返回结果中包含的上传片段数量的最大值。
NextPartNumberMarker *int64 当IsTruncated为true时,NextPartNumberMarker可以作为后续查询已上传片段请求中的PartNumberMarker的值。
Owner *Owner 分段上传对象的拥有者信息,包含了用户名和Id等信息。
Parts []*Part 包含了已上传片段信息的数组,数组中的每一项包含了该片段的Entity tag、最后修改时间、PartNumber和大小等信息。
RequestCharged *string 如果返回结果中包含该属性,表示请求的发起者对该次请求操作付费。
StorageClass *string 对象的存储类型。
UploadId *string 本次分段上传操作Id。