private static void Main(string[] args)
var ak = Environment.GetEnvironmentVariable("TOS_ACCESS_KEY");
var sk = Environment.GetEnvironmentVariable("TOS_SECRET_KEY");
var endpoint = "https://tos-cn-beijing.volces.com";
var region = "cn-beijing";
var srcBucketName = "*** Provide your bucket name ***";
var dstBucketName = "*** Provide your dst bucket name ***";
var srcObjectKey = "srcObjectKey";
var dstObjectKey = "objectKey";
var client = TosClientBuilder.Builder().SetAk(ak).SetSk(sk).SetEndpoint(endpoint).SetRegion(region).Build();
var headObjectInput = new HeadObjectInput()
var headObjectOutput = client.HeadObject(headObjectInput);
var totalSize = headObjectOutput.ContentLength;
Int64 partSize = 20 * 1024 * 1024;
var partCount = totalSize / partSize;
if (totalSize % partSize != 0)
var parts = new UploadedPart[partCount];
var createMultipartUploadInput = new CreateMultipartUploadInput()
var createMultipartUploadOutput = client.CreateMultipartUpload(createMultipartUploadInput);
var uploadId = createMultipartUploadOutput.UploadID;
for (var i = 0; i < partCount; i++)
var offset = partSize * i;
var contentSize = (partSize < totalSize - offset) ? partSize : (totalSize - offset);
var uploadPartCopyInput = new UploadPartCopyInput()
SrcBucket = srcBucketName,
CopySourceRangeStart = offset,
CopySourceRangeEnd = offset + contentSize - 1
var uploadPartCopyOutput = client.UploadPartCopy(uploadPartCopyInput);
parts[i] = new UploadedPart { PartNumber = i + 1, ETag = uploadPartCopyOutput.ETag };
Console.WriteLine("UploadPartCopy succeeded, request id {0}", uploadPartCopyOutput.RequestID);
var completeMultipartUploadInput = new CompleteMultipartUploadInput()
var completeMultipartUploadOutput = client.CompleteMultipartUpload(completeMultipartUploadInput);
Console.WriteLine("CompleteMultipartUpload succeeded, request id {0}",
completeMultipartUploadOutput.RequestID);
catch (TosServerException ex)
Console.WriteLine("Copy failed, request id {0}", ex.RequestID);
Console.WriteLine("Copy failed, status code {0}", ex.StatusCode);
Console.WriteLine("Copy failed, response error code {0}", ex.Code);
Console.WriteLine("Copy failed, response error message {0}", ex.Message);
catch (TosClientException ex)
Console.WriteLine("Copy failed, error message {0}", ex.Message);
Console.WriteLine("Copy failed, {0}", ex.Message);