void ObjectSample::MultipartUploadObject()

in sample/src/object/ObjectSample.cc [544:593]


void ObjectSample::MultipartUploadObject()
{
    std::string key = "MultipartUploadObject";
    InitiateMultipartUploadRequest initUploadRequest(bucket_, key);
    auto uploadIdResult = client->InitiateMultipartUpload(initUploadRequest);
    auto uploadId = uploadIdResult.result().UploadId();
    std::string fileToUpload = Config::BigFileToUpload;
    int64_t partSize = 100 * 1024;
    PartList partETagList;

    auto fileSize = getFileSize(fileToUpload);
    int partCount = static_cast<int>(fileSize / partSize);
    // Calculate how many parts to be divided
    if (fileSize % partSize != 0) {
        partCount++;
    }

    // Upload multiparts to bucket
    for (int i = 1; i <= partCount; i++) {
        auto skipBytes = partSize * (i - 1);
        auto size = (partSize < fileSize - skipBytes) ? partSize : (fileSize - skipBytes);
        std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>(fileToUpload, std::ios::in|std::ios::binary);
        content->seekg(skipBytes, std::ios::beg);
		
        UploadPartRequest uploadPartRequest(bucket_, key, content);
        uploadPartRequest.setContentLength(size);
        uploadPartRequest.setUploadId(uploadId);
        uploadPartRequest.setPartNumber(i);
        auto uploadPartOutcome = client->UploadPart(uploadPartRequest);
        if (uploadPartOutcome.isSuccess()) {
            Part part(i, uploadPartOutcome.result().ETag());
            partETagList.push_back(part);
        }
        else {
            PrintError(__FUNCTION__, uploadPartOutcome.error());
        }
    }

    // Complete to upload multiparts
    CompleteMultipartUploadRequest request(bucket_, key);
    request.setUploadId(uploadId);
    request.setPartList(partETagList);
    auto outcome = client->CompleteMultipartUpload(request);
    if (outcome.isSuccess()) {
        std::cout << __FUNCTION__ << " success, UploadID : " << uploadId << std::endl;
    }
    else {
        PrintError(__FUNCTION__, outcome.error());
    }
}