本文介绍如何使用 TOS C++ SDK 完成一个基础操作,例如创建存储桶、上传、下载和删除对象等。
通过示例代码模板描述使用 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; }
说明
关于删除对象的更多示例链接,请参见删除对象。