标准扩展接口

终止分段上传

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

代码示例:

using System;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;

namespace DotNetSDK.ObjectOperation
{
    public class AbortMultipartUploadExample
    {
        public static async Task AbortMultipartUpload()
        {
            var accessKey = "YOUR_ACCESS_KEY";
            var secretKey = "YOUR_SECRET_KEY";
            var endpoint = "YOUR_ENDPOINT";
            var bucketName = "EXAMPLE_BUCKET";
            var key = "EXAMPLE_KEY";
            var uploadId = "UPLOAD_ID";
            try
            {
                var credentials = new BasicAWSCredentials(accessKey, secretKey);
                var conf = new AmazonS3Config
                {
                    ServiceURL = endpoint
                };
                var s3Client = new AmazonS3Client(credentials, conf);
                var abortMultipartUploadRequest = new AbortMultipartUploadRequest()
                {
                    BucketName = bucketName,
                    Key = key,
                    UploadId = uploadId
                };

                var result = await s3Client.AbortMultipartUploadAsync(abortMultipartUploadRequest);
                if (result.HttpStatusCode != System.Net.HttpStatusCode.NoContent)
                {
                    Console.WriteLine("fail to abort multipart upload, uploadId:{0}, HttpStatusCode:{1}, ErrorCode:{2}.", uploadId, (int) result.HttpStatusCode, result.HttpStatusCode);
                    return;
                }

                Console.WriteLine("aborted multipart upload, uploadId:{0}.", uploadId);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

AbortMultipartUploadRequest可设置的参数如下:

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

列出分段上传任务

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

using System;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;

namespace DotNetSDK.ObjectOperation
{
    public class ListMultipartUploadsExample
    {
        public static async Task ListMultipartUploads()
        {
            var accessKey = "YOUR_ACCESS_KEY";
            var secretKey = "YOUR_SECRET_KEY";
            var endpoint = "YOUR_ENDPOINT";
            var bucketName = "EXAMPLE_BUCKET";
            var credentials = new BasicAWSCredentials(accessKey, secretKey);
            try
            {
                var conf = new AmazonS3Config
                {
                    ServiceURL = endpoint
                };
                var s3Client = new AmazonS3Client(credentials, conf);
                var listMultipartUploadsRequest = new ListMultipartUploadsRequest()
                {
                    BucketName = bucketName
                };

                var result = await s3Client.ListMultipartUploadsAsync(listMultipartUploadsRequest);
                if (result.HttpStatusCode != System.Net.HttpStatusCode.OK)
                {
                    Console.WriteLine("fail to list multipart uploads in bucket {0}, HttpStatusCode:{1}, ErrorCode:{2}.", bucketName, (int) result.HttpStatusCode, result.HttpStatusCode);
                    return;
                }

                foreach (var multipartUpload in result.MultipartUploads)
                {
                    Console.WriteLine("key: {0}, uploadId: {1}", multipartUpload.Key, multipartUpload.UploadId);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

ListMultipartUploadsRequest可设置的参数如下:

参数 类型 说明 是否必要
BucketName string 执行本操作的bucket名称。
Delimiter string 与Prefix参数一起用于对对象key进行分组的字符。所有key包含指定的Prefix且第一次出现Delimiter字符之间的对象作为一组。如果没有指定Prefix参数,按Delimiter对所有对象key进行分割,多个对象分割后从对象key开始到第一个Delimiter之间相同的部分形成一组。
Encoding EncodingType 用于设置response中对象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的片段信息。

ListMultipartUploads返回的结果如下:

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

列出已上传的片段

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

代码示例:

using System;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;

namespace DotNetSDK.ObjectOperation
{
    public class ListPartsExample
    {
        public static async Task ListParts()
        {
            var accessKey = "YOUR_ACCESS_KEY";
            var secretKey = "YOUR_SECRET_KEY";
            var endpoint = "YOUR_ENDPOINT";
            var bucketName = "EXAMPLE_BUCKET";
            var key = "EXAMPLE_KEY";
            var uploadId = "UPLOAD_ID";
            var credentials = new BasicAWSCredentials(accessKey, secretKey);
            try
            {
                var conf = new AmazonS3Config
                {
                    ServiceURL = endpoint
                };
                var s3Client = new AmazonS3Client(credentials, conf);
                var listPartsRequest = new ListPartsRequest()
                {
                    BucketName = bucketName,
                    Key = key,
                    UploadId = uploadId
                };

                var result = await s3Client.ListPartsAsync(listPartsRequest);
                if (result.HttpStatusCode != System.Net.HttpStatusCode.OK)
                {
                    Console.WriteLine("fail to list part of uploadId {0}, HttpStatusCode:{1}, ErrorCode:{2}.", uploadId, (int) result.HttpStatusCode, result.HttpStatusCode);
                    return;
                }

                Console.WriteLine("uploaded parts:");
                foreach (var partDetail in result.Parts)
                {
                    Console.WriteLine("Etag:{0}, PartNumber:{1}, Size:{2}.", partDetail.ETag, partDetail.PartNumber, partDetail.Size);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

ListPartsRequest可设置的参数如下:

参数 类型 说明 是否必要
BucketName string 执行本操作的bucket名称。
Key string 分段上传的对象的key。
MaxParts int 指定返回片段信息的数量,默认值和最大值均为1000。
PartNumberMarker string 用于指定返回part number大于PartNumberMarker的片段信息。
UploadId string 指定返回该id所属的分段上传的片段信息。

ListParts返回的结果如下:

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