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()
Meta = new Dictionary<string, string>() { { "key", "value" } },
ContentType = "text/html",
ContentLanguage = "zh-cn",
CacheControl = "no-store",
Expires = DateTime.Now.AddHours(1),
ContentDisposition = "example.png",
ContentEncoding = "deflate",
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);
Int64 partSize = 20 * 1024 * 1024;
var fi = new FileInfo(localFileName);
var fileSize = fi.Length;
var partCount = fileSize / partSize;
if (fileSize % partSize != 0)
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);