#include "TosClientV2.h"
using namespace VolcengineTos;
static int64_t getFileSize(const std::string& file)
std::fstream f(file, std::ios::in | std::ios::binary);
int64_t size = f.tellg();
std::string region = "Your Region";
std::string accessKey = std::getenv("TOS_ACCESS_KEY");
std::string secretKey = std::getenv("TOS_SECRET_KEY");
std::string bucketName = "examplebucket";
std::string objectName = "exampledir/exampleobject.txt";
TosClientV2 client(region, accessKey, secretKey);
CreateMultipartUploadInput input(bucketName, objectName);
input.setAcl(ACLType::PublicRead);
input.setStorageClass(StorageClassType::IA);
input.setMeta({{"self-test", "yes"}});
auto upload = client.createMultipartUpload(input);
if (!upload.isSuccess()) {
std::cout << "createMultipartUpload failed." << upload.error().String() << std::endl;
std::cout << "createMultipartUpload success." << std::endl;
std::string fileToUpload = "yourLocalFilename";
int64_t partSize = 5 * 1024 * 1024;
std::vector<UploadedPartV2> partResList;
auto fileSize = getFileSize(fileToUpload);
int partCount = static_cast<int>(fileSize / partSize);
if (fileSize % partSize != 0) {
auto uploadId = upload.result().getUploadId();
for (int i = 1; i <= partCount; i++) {
auto offset = partSize * (i - 1);
auto size = (partSize < fileSize - offset) ? partSize : (fileSize - offset);
std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>(fileToUpload, std::ios::in|std::ios::binary);
content->seekg(offset, std::ios::beg);
UploadPartV2Input uploadPartInput(bucketName, objectName,uploadId, size,i,content);
auto uploadPartOutput = client.uploadPart(uploadPartInput);
if (!uploadPartOutput.isSuccess()) {
std::cout << "uploadPart failed." << upload.error().String() << std::endl;
UploadedPartV2 part(i, uploadPartOutput.result().getETag());
partResList.push_back(part);
CompleteMultipartUploadV2Input completeMultipartUploadInput(bucketName, objectName, uploadId, partResList);
auto com = client.completeMultipartUpload(completeMultipartUploadInput);
std::cout << "CompleteMultipartUpload failed." << upload.error().String() << std::endl;
std::cout << "CompleteMultipartUpload success." << com.result().getRequestInfo().getRequestId() << std::endl;