通过 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。