通过 copyObject 可以在同一地域的存储桶之间拷贝对象,也可以在同一个存储桶内拷贝对象。复制时可以设置指定新的元数据信息或保持源对象的元数据信息。
对象小于 5GiB 时,您可以使用普通拷贝。以下代码用于将 srcbucket
桶中 srcdir/exampleobject.txt
对象拷贝到 destbucket
桶中,并设置对象名为 destdir/exampleobject.txt
。
#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 名称,例如 destbucket std::string bucketName = "destbucket"; // 填写Object完整路径,完整路径中不能包含Bucket名称,destdir/exampleobject.txt。 std::string objectName = "destdir/exampleobject.txt"; // 填写 Bucket 名称,例如 srcbucket std::string srcBucketName = "srcbucket"; // 填写Object完整路径,完整路径中不能包含Bucket名称,srcdir/exampleobject.txt。 std::string srcObjectName = "srcdir/exampleobject.txt"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); CopyObjectV2Input input(bucketName, objectName, srcBucketName,srcObjectName); // 设置 ACL 为 PublicRead input.setAcl(ACLType::PublicRead); input.setStorageClass(StorageClassType::STANDARD); input.setMetadataDirective(MetadataDirectiveType::REPLACE); auto output = client.copyObject(input); if (!output.isSuccess()) { // 异常处理 std::cout << "CopyObject failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "CopyObject 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 名称,例如 destbucket std::string bucketName = "destbucket"; // 填写Object完整路径,完整路径中不能包含Bucket名称,destdir/exampleobject.txt。 std::string objectName = "destdir/exampleobject.txt"; // 填写 Bucket 名称,例如 srcbucket std::string srcBucketName = "srcbucket"; // 填写Object完整路径,完整路径中不能包含Bucket名称,srcdir/exampleobject.txt。 std::string srcObjectName = "srcdir/exampleobject.txt"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); // 默认行为为拷贝时继承对象元数据,如果需要显示设置,可设置参数 MetadataDirective CopyObjectV2Input input(bucketName, objectName, srcBucketName,srcObjectName); auto output = client.copyObject(input); if (!output.isSuccess()) { // 异常处理 std::cout << "CopyObject failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "CopyObject 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 名称,例如 destbucket std::string bucketName = "destbucket"; // 填写Object完整路径,完整路径中不能包含Bucket名称,destdir/exampleobject.txt。 std::string objectName = "destdir/exampleobject.txt"; // 填写 Bucket 名称,例如 srcbucket std::string srcBucketName = "srcbucket"; // 填写Object完整路径,完整路径中不能包含Bucket名称,srcdir/exampleobject.txt。 std::string srcObjectName = "srcdir/exampleobject.txt"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); CopyObjectV2Input input(bucketName, objectName, srcBucketName,srcObjectName); // 通过设置 MetadataDirective 为 MetadataDirectiveType::REPLACE 实现重写对象元数据 input.setMetadataDirective(MetadataDirectiveType::REPLACE); input.setMeta({{"self-test", "yes"}}); auto output = client.copyObject(input); if (!output.isSuccess()) { // 异常处理 std::cout << "CopyObject failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "CopyObject success. the object etag:" << output.result().getETag() << std::endl; // 释放网络等资源 CloseClient(); return 0; }
关于普通拷贝的 API 文档,请参见 CopyObject。