You need to enable JavaScript to run this app.
导航
快速入门(C++ SDK)
最近更新时间:2024.02.04 18:30:55首次发布时间:2022.04.08 10:56:29

本文介绍如何使用 TOS C++ SDK 完成一个基础操作,例如创建存储桶、上传、下载和删除对象等。

前提条件

  1. 安装 SDK
  2. 初始化客户端

客户端通用示例

通过示例代码模板描述使用 TosClient 的通用示例。

#include "TosClientV2.h"
using namespace VolcengineTos;

int main(void){
    // 初始化 TOS 账号信息
    // Your Region 填写 Bucket 所在 Region
    std::string region = "Your Region";
    std::string accessKey = std::getenv("TOS_ACCESS_KEY");
    std::string secretKey = std::getenv("TOS_SECRET_KEY");
    // 填写 Bucket 名称,例如 examplebucket
    std::string bucketName = "examplebucket";
        // 初始化网络等资源
    InitializeClient();
    // 创建交互的 client
    TosClientV2 client(region, accessKey, secretKey);
        CreateBucketV2Input input(bucketName);     // 创建桶
    auto output = client.createBucket(input);
    if(!output.isSuccess()){
        auto error = output.error();
        if(error.isClientError()){
            // 客户端错误
            std::cout << "TosClientError: {message=" << error.getMessage() << "}";
        } else {
            // 服务端错误
            std::cout << "TosServerError: {statusCode=" << error.getStatusCode() << ", "
            << "code=" << error.getCode() << ", "
            << "message=" << error.getMessage() << ", "
            << "requestID=" << error.getRequestId() << ", "
            << "hostID=" << error.getHostId() << "}";
        }
        CloseClient();
        return -1;
    } 
    
    std::cout << "CreateBucket Success, the Bucket Location:"<< output.result().getLocation() << std::endl;
    // 释放网络等资源
    CloseClient();
    return 0;
}

创建桶

存储桶(Bucket)是 TOS 的全局唯一的命名空间,相当于数据的容器,用来储存对象数据。以下代码展示如何创建一个新存储桶。

#include "TosClientV2.h"
using namespace VolcengineTos;

int main(void){
    // 初始化 TOS 账号信息
    // Your Region 填写 Bucket 所在 Region
    std::string region = "Your Region";
    std::string accessKey = std::getenv("TOS_ACCESS_KEY");
    std::string secretKey = std::getenv("TOS_SECRET_KEY");
    // 填写 Bucket 名称,例如 examplebucket
    std::string bucketName = "examplebucket";
        // 初始化网络等资源
    InitializeClient();
    // 创建交互的 client
    TosClientV2 client(region, accessKey, secretKey);
        CreateBucketV2Input input(bucketName);     // 创建桶
    auto output = client.createBucket(input);
    if (!output.isSuccess()) {
        // 异常处理
        std::cout << "CreateBucket failed." << output.error().String() << std::endl;
        // 释放网络等资源
        CloseClient();
        return -1;
    }

    std::cout << "CreateBucket Success, the bucket location:" << output.result().getLocation() << std::endl;

    // 释放网络等资源
    CloseClient();
    return 0;
}

说明

关于创建桶的更多信息,请参见创建桶

上传对象

新建桶成功后,可以往桶中上传对象。以下代码展示如何上传字符串到已创建的桶中。

#include "TosClientV2.h"
using namespace VolcengineTos;

int main(void){
    // 初始化 TOS 账号信息
    // Your Region 填写 Bucket 所在 Region
    std::string region = "Your Region";
    std::string accessKey = std::getenv("TOS_ACCESS_KEY");
    std::string secretKey = std::getenv("TOS_SECRET_KEY");
    // 填写 Bucket 名称,例如 examplebucket
    std::string bucketName = "examplebucket";
    // 填写 Object 完整路径,完整路径中不能包含 Bucket 名称,例如exampledir/exampleobject.txt。
    std::string objectName = "exampledir/exampleobject.txt";
    
    // 初始化网络等资源
    InitializeClient();
    // 创建交互的 client
    TosClientV2 client(region, accessKey, secretKey);
    
    // 需要上传的对象数据,以 stringstream 的形式上传
    std::string data = "Object data to be uploaded";
    auto ss = std::make_shared<std::stringstream>(data);
    PutObjectV2Input input(bucketName, objectName, ss);
    auto output = client.putObject(input);
    if (!output.isSuccess()) {
        // 异常处理
    std::cout << "PutObject failed." << output.error().String() << std::endl;
        // 释放网络等资源
    CloseClient();
        return -1;
    }

    std::cout << "PutObject success. the object etag:" << output.result().getETag() << std::endl;
    // 释放网络等资源
    CloseClient();
    return 0;
}

说明

关于上传对象的更多示例链接,请参见上传对象

下载对象

以下代码用于将指定的对象下载到内存中。

#include "TosClientV2.h"
using namespace VolcengineTos;

int main(void){
    // 初始化 TOS 账号信息
    // Your Region 填写 Bucket 所在 Region
    std::string region = "Your Region";
    std::string accessKey = std::getenv("TOS_ACCESS_KEY");
    std::string secretKey = std::getenv("TOS_SECRET_KEY");
    // 填写 Bucket 名称,例如 examplebucket
    std::string bucketName = "examplebucket";
    // 填写 Object 完整路径,完整路径中不能包含 Bucket 名称,例如exampledir/exampleobject.txt。
    std::string objectName = "exampledir/exampleobject.txt";

    // 初始化网络等资源
    InitializeClient();
    // 创建交互的 client
    TosClientV2 client(region, accessKey, secretKey);
    
    GetObjectV2Input input(bucketName, objectName);
    auto output = client.getObject(input);
    if (!output.isSuccess()) {
        // 异常处理
        std::cout << "GetObject failed." << output.error().String() << std::endl;
        // 释放网络等资源
        CloseClient();
        return -1;
    }
    auto stream = output.result().getContent();
    std::string ss;;

    char streamBuffer[256];
    memset(streamBuffer, 0, 256);
    while (stream->good()) {
        stream->read(streamBuffer, 256);
        // 根据实际情况处理数据。
    }
    std::cout << "GetObject success. the object etag:" << output.result().getETags()  << std::endl;

    // 释放网络等资源
    CloseClient();
    return 0;
}

说明

关于下载对象的更多示例链接,请参见下载对象

列举对象

如下代码展示如何列举桶中已经存在的最多 2000 个对象,其中首次请求列举 1000 个对象,并通过 isTruncated 参数校验是否列举完全,若还有待列举对象,依据 NextContinuationToken 继续列举。

#include "TosClientV2.h"
using namespace VolcengineTos;

int main(void){
    // 初始化 TOS 账号信息
    // Your Region 填写 Bucket 所在 Region
    std::string region = "Your Region";
    std::string accessKey = std::getenv("TOS_ACCESS_KEY");
    std::string secretKey = std::getenv("TOS_SECRET_KEY");
    // 填写 Bucket 名称,例如 examplebucket
    std::string bucketName = "examplebucket";

    // 初始化网络等资源
    InitializeClient();
    // 创建交互的 client
    TosClientV2 client(region, accessKey, secretKey);

    ListObjectsType2Input input(bucketName);
    input.setMaxKeys(1000);
    auto output = client.listObjectsType2(input);
    if (!output.isSuccess()) {
        // 异常处理
        std::cout << "ListObjects failed." << output.error().String() << std::endl;
        // 释放网络等资源
        CloseClient();
        return -1;
    }

    std::cout << "ListObjects success." << std::endl;
    for (const auto& object : output.result().getContents()) {
        std::cout << "object"<<
                ",name:" << object.getKey() <<
                ",size:" << object.getSize() <<
                ",lastmodify time:" << object.getStringFormatLastModified() <<
                ",storage class:" << object.getStringFormatStorageClass() << std::endl;
 
    // 使用 continuationToken 列举对象
    if (output.result().isTruncated()){
        input.setContinuationToken(output.result().getNextContinuationToken());
        auto output1 = client.listObjectsType2(input);
        if (!output1.isSuccess()) {
            // 异常处理
            std::cout << "ListObjects failed." << output1.error().String() << std::endl;
            // 释放网络等资源
            CloseClient();
            return -1;
        }

        std::cout << "ListObjects success." << std::endl;
        for (const auto& object : output1.result().getContents()) {
            std::cout << "object"<<
                    ",name:" << object.getKey() <<
                    ",size:" << object.getSize() <<
                    ",lastmodify time:" << object.getStringFormatLastModified() <<
                    ",storage class:" << object.getStringFormatStorageClass() << std::endl;
        }
    }
    
    // 释放网络等资源
    CloseClient();
    return 0;
}

说明

关于列举对象的更多示例链接,请参见列举对象

删除对象

如下代码展示如何从桶中删除一个对象。

#include "TosClientV2.h"
using namespace VolcengineTos;

int main(void){
    // 初始化 TOS 账号信息
    // Your Region 填写 Bucket 所在 Region
    std::string region = "Your Region";
    std::string accessKey = std::getenv("TOS_ACCESS_KEY");
    std::string secretKey = std::getenv("TOS_SECRET_KEY");
    // 填写 Bucket 名称,例如 examplebucket
    std::string bucketName = "examplebucket";
    // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
    std::string objectName = "exampledir/exampleobject.txt";

    // 初始化网络等资源
    InitializeClient();
    // 创建交互的 client
    TosClientV2 client(region, accessKey, secretKey);
    
    DeleteObjectInput input(bucketName, objectKey);
    auto output = client.deleteObject(input);
    if (!output.isSuccess()) {
        // 异常处理
        std::cout << "DeleteObject failed." << output.error().String() << std::endl;
        // 释放网络等资源
        CloseClient();
        return -1;
    }

    std::cout << "DeleteObject success." << std::endl;
    std::cout << "DeleteObject request id:" << output.result().getRequestInfo().getRequestId() << std::endl;

    // 释放网络等资源
    CloseClient();
    return 0;
}

说明

关于删除对象的更多示例链接,请参见删除对象