分片上传接口 返回结果 ListParts返回的结果如下: 参数 类型 说明 BucketName string 执行本操作的桶名称 IsTruncated bool 当为false时表示返回结果中包含了全部符合本次请求查询条件的上传分片信息,否则只返回了数量为MaxParts个的分片信息 Key string 分片上传对象的名称 MaxParts int 本次返回结果中包含的上传分片数量的最大值 NextPartNumberMarker int 当IsTruncated为true时,NextPartNumberMarker可以作为后续查询已上传分片请求中的PartNumberMarker的值 Owner Owner 分片上传对象的所有者信息,包含了用户名和Id等信息 Parts List 包含了已上传分片信息的数组,数组中的每一项包含了该分片的Entity tag、最后修改时间、PartNumber和大小等信息 UploadId string 分片上传操作的id 复制分片 功能说明 CopyPart操作可以从一个已存在的对象中拷贝指定分片的数据,当拷贝的对象大小超过5GB,必须使用UploadPartCopy操作完成对象的复制。除了最后一个分片外,每个拷贝分片的大小范围是[5MB,5GB]。在一个在拷贝大对象之前,需要使用CompleteMultiPartUpload操作获取一个upload id,在完成拷贝操作之后,需要使用CompleteMultipartUpload操作组装已拷贝的分片成为一个对象。 代码示例 plaintext using System; using System.Collections.Generic; using System.Threading.Tasks; using Amazon.Runtime; using Amazon.S3; using Amazon.S3.Model; namespace DotNetSDK.ObjectOperation { public class CopyPartsExample { public static async Task CopyParts() { var accessKey " "; var secretKey " "; var endpoint " "; var sourceBucket " "; var sourceKey " "; var destinationBucket " "; var destinationKey " "; try { var credentials new BasicAWSCredentials(accessKey, secretKey); List copyResponses new List (); var conf new AmazonS3Config { ServiceURL endpoint }; var s3Client new AmazonS3Client(credentials, conf); // 发起一个分片上传操作请求,获取upload id Task taskInitiateMultipartUploadResp s3Client.InitiateMultipartUploadAsync(new InitiateMultipartUploadRequest() { BucketName destinationBucket, Key destinationKey }); var uploadId taskInitiateMultipartUploadResp.Result.UploadId; Console.WriteLine("upload id: {0}", uploadId); // 获取被拷贝对象的大小 GetObjectMetadataRequest getObjectMetadataRequest new GetObjectMetadataRequest { BucketName sourceBucket, Key sourceKey }; var getObjectMetadataResponse await s3Client.GetObjectMetadataAsync(getObjectMetadataRequest); long objectSize getObjectMetadataResponse.ContentLength; // 拷贝分片 long partSize 5 (long) Math.Pow(2, 20); // 5 MB. long bytePosition 0; for (int i 1; bytePosition objectSize ? objectSize 1 : bytePosition + partSize 1, PartNumber i }; var copyPartResponse await s3Client.CopyPartAsync(copyPartRequest); copyResponses.Add(copyPartResponse); bytePosition + partSize; } // 完成拷贝分片 CompleteMultipartUploadRequest completeRequest new CompleteMultipartUploadRequest { BucketName destinationBucket, Key destinationKey, UploadId uploadId }; completeRequest.AddPartETags(copyResponses); CompleteMultipartUploadResponse completeUploadResponse await s3Client.CompleteMultipartUploadAsync(completeRequest); if (completeUploadResponse.HttpStatusCode ! System.Net.HttpStatusCode.OK) { Console.WriteLine("fail to get copy parts, HttpStatusCode:{0}, ErrorCode:{1}.", (int) completeUploadResponse.HttpStatusCode, completeUploadResponse.HttpStatusCode); return; } Console.WriteLine("copy object from {0}/{1} to {2}/{3}.", sourceBucket, sourceKey, destinationBucket, destinationKey); } catch (Exception e) { Console.WriteLine(e.Message); } } } }
来自: