using System.Collections.Generic;
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 bucketName = "*** Provide your bucket name ***";
var objectKey = "example_dir/example.txt";
var localFileName = "/usr/local/test.txt";
var client = TosClientBuilder.Builder().SetAk(ak).SetSk(sk).SetEndpoint(endpoint).SetRegion(region).Build();
var createMultipartUploadInput = new CreateMultipartUploadInput
ACL = ACLType.ACLPrivate,
StorageClass = StorageClassType.StorageClassIa,
Meta = new Dictionary<string, string> { { "key", "value" } }
var createMultipartUploadOutput = client.CreateMultipartUpload(createMultipartUploadInput);
uploadID = createMultipartUploadOutput.UploadID;
Console.WriteLine("CreateMultipartUpload succeeded, request id {0}",
createMultipartUploadOutput.RequestID);
Console.WriteLine("CreateMultipartUpload succeeded, upload id {0}", uploadID);
catch (TosServerException ex)
Console.WriteLine("CreateMultipartUpload failed, request id {0}", ex.RequestID);
Console.WriteLine("CreateMultipartUpload failed, status code {0}", ex.StatusCode);
Console.WriteLine("CreateMultipartUpload failed, response error code {0}", ex.Code);
Console.WriteLine("CreateMultipartUpload failed, response error message {0}", ex.Message);
catch (TosClientException ex)
Console.WriteLine("CreateMultipartUpload failed, error message {0}", ex.Message);
Console.WriteLine("CreateMultipartUpload failed, {0}", ex.Message);
long partSize = 20 * 1024 * 1024;
var fi = new FileInfo(localFileName);
var fileSize = fi.Length;
var partCount = fileSize / partSize;
if (fileSize % partSize != 0) partCount++;
var parts = new UploadedPart[partCount];
using (var fileStream = File.Open(localFileName, FileMode.Open, FileAccess.Read))
for (var i = 0; i < partCount; i++)
var offset = partSize * i;
fileStream.Seek(offset, 0);
var contentSize = partSize < fileSize - offset ? partSize : fileSize - offset;
var UploadPartInput = new UploadPartInput
ContentLength = contentSize
var uploadPartOutput = client.UploadPart(UploadPartInput);
parts[i] = new UploadedPart { PartNumber = i + 1, ETag = uploadPartOutput.ETag };
Console.WriteLine("UploadPart succeeded, request id {0}", uploadPartOutput.RequestID);
catch (TosServerException ex)
Console.WriteLine("UploadPart failed, request id {0}", ex.RequestID);
Console.WriteLine("UploadPart failed, status code {0}", ex.StatusCode);
Console.WriteLine("UploadPart failed, response error code {0}", ex.Code);
Console.WriteLine("UploadPart failed, response error message {0}", ex.Message);
catch (TosClientException ex)
Console.WriteLine("UploadPart failed, error message {0}", ex.Message);
Console.WriteLine("UploadPart failed, {0}", ex.Message);
var completeMultipartUploadInput = new CompleteMultipartUploadInput
var completeMultipartUploadOutput = client.CompleteMultipartUpload(completeMultipartUploadInput);
Console.WriteLine("CompleteMultipartUpload succeeded, request id {0}",
completeMultipartUploadOutput.RequestID);
catch (TosServerException ex)
Console.WriteLine("CompleteMultipartUpload failed, request id {0}", ex.RequestID);
Console.WriteLine("CompleteMultipartUpload failed, status code {0}", ex.StatusCode);
Console.WriteLine("CompleteMultipartUpload failed, response error code {0}", ex.Code);
Console.WriteLine("CompleteMultipartUpload failed, response error message {0}", ex.Message);
catch (TosClientException ex)
Console.WriteLine("CompleteMultipartUpload failed, error message {0}", ex.Message);
Console.WriteLine("CompleteMultipartUpload failed, {0}", ex.Message);