public CopyObjectResult ResumableCopyObject()

in sdk/OssClient.cs [1555:1615]


        public CopyObjectResult ResumableCopyObject(CopyObjectRequest copyObjectRequest, string checkpointDir, long? partSize = null)
        {
            ThrowIfNullRequest(copyObjectRequest);

            // Adjusts part size
            long actualPartSize = AdjustPartSize(partSize);

            // Gets the file size
            var metaRequest = new GetObjectMetadataRequest(copyObjectRequest.SourceBucketName, copyObjectRequest.SourceKey)
            {
                RequestPayer = copyObjectRequest.RequestPayer,
                VersionId = copyObjectRequest.SourceVersionId
            };
            var objectMeta = GetObjectMetadata(metaRequest);
            var fileSize = objectMeta.ContentLength;

            if (fileSize <= actualPartSize)
            {
                return CopyObject(copyObjectRequest);
            }

            var resumableCopyContext = LoadResumableCopyContext(copyObjectRequest, objectMeta, checkpointDir, actualPartSize);

            if (resumableCopyContext.UploadId == null)
            {
                var initRequest = new InitiateMultipartUploadRequest(copyObjectRequest.DestinationBucketName,
                                                                     copyObjectRequest.DestinationKey,
                                                                     copyObjectRequest.NewObjectMetadata)
                {
                    RequestPayer = copyObjectRequest.RequestPayer
                };
                var initResult = InitiateMultipartUpload(initRequest);
                resumableCopyContext.UploadId = initResult.UploadId;
            }

            // Executes the copy
            ResumableCopyWithRetry(copyObjectRequest, resumableCopyContext);

            // Completes the copy
            var completeRequest = new CompleteMultipartUploadRequest(copyObjectRequest.DestinationBucketName,
                                                                     copyObjectRequest.DestinationKey, resumableCopyContext.UploadId)
            {
                RequestPayer = copyObjectRequest.RequestPayer
            };
            foreach (var part in resumableCopyContext.PartContextList)
            {
                completeRequest.PartETags.Add(part.PartETag);
            }
            var result = CompleteMultipartUpload(completeRequest);

            resumableCopyContext.Clear();

            // Gets the last modified time
            metaRequest = new GetObjectMetadataRequest(copyObjectRequest.DestinationBucketName, copyObjectRequest.DestinationKey)
            {
                RequestPayer = copyObjectRequest.RequestPayer,
                VersionId = result.VersionId
            };
            objectMeta = GetObjectMetadata(metaRequest);
            return new CopyObjectResult() { ETag = result.ETag, LastModified = objectMeta.LastModified };
        }