tencent cloud

对象存储

动态与公告
产品动态
产品公告
产品简介
产品概述
功能概览
应用场景
产品优势
基本概念
地域和访问域名
规格与限制
产品计费
计费概述
计费方式
计费项
免费额度
计费示例
查看和下载账单
欠费说明
常见问题
快速入门
控制台快速入门
COSBrowser 快速入门
用户指南
创建请求
存储桶
对象
数据管理
批量处理
全球加速
监控与告警
运维中心
数据处理
内容审核
智能工具箱
数据工作流
应用集成
工具指南
工具概览
环境安装与配置
COSBrowser 工具
COSCLI 工具
COSCMD 工具
COS Migration 工具
FTP Server 工具
Hadoop 工具
COSDistCp 工具
HDFS TO COS 工具
GooseFS-Lite 工具
在线辅助工具
自助诊断工具
实践教程
概览
访问控制与权限管理
性能优化
使用 AWS S3 SDK 访问 COS
数据容灾备份
域名管理实践
图片处理实践
COS 音视频播放器实践
工作流实践
数据直传
内容审核实践
数据安全
数据校验
大数据实践
COS 成本优化解决方案
在第三方应用中使用 COS
迁移指南
本地数据迁移至 COS
第三方云存储数据迁移至 COS
以 URL 作为源地址的数据迁移至 COS
COS 之间数据迁移
Hadoop 文件系统与 COS 之间的数据迁移
数据湖存储
云原生数据湖
元数据加速
数据加速器 GooseFS
数据处理
数据处理概述
图片处理
媒体处理
内容审核
文件处理
文档处理
故障处理
获取 RequestId 操作指引
通过外网上传文件至 COS 缓慢
访问 COS 时返回403错误码
资源访问异常
POST Object 常见异常
API 文档
简介
公共请求头部
公共响应头部
错误码
请求签名
操作列表
Service 接口
Bucket 接口
Object 接口
批量处理接口
数据处理接口
任务与工作流
内容审核接口
云查毒接口
SDK 文档
SDK 概览
准备工作
Android SDK
C SDK
C++ SDK
.NET(C#) SDK
Flutter SDK
Go SDK
iOS SDK
Java SDK
JavaScript SDK
Node.js SDK
PHP SDK
Python SDK
React Native SDK
小程序 SDK
错误码
鸿蒙(Harmony) SDK
终端 SDK 质量优化
安全与合规
数据容灾
数据安全
访问管理
常见问题
热门问题
一般性问题
计费计量问题
域名合规问题
存储桶配置问题
域名和 CDN 问题
文件操作问题
日志监控问题
权限管理问题
数据处理问题
数据安全问题
预签名 URL 问题
SDK 类问题
工具类问题
API 类问题
服务协议
Service Level Agreement
隐私政策
数据处理和安全协议
联系我们
词汇表

复制与移动对象

PDF
聚焦模式
字号
最后更新时间: 2026-03-05 16:55:32

简介

本文介绍对象存储 COS 通过 C++ SDK 实现复制与移动对象功能的示例代码和描述。包括高级拷贝接口、简单拷贝接口、移动对象三个部分。

注意事项

若您使用简单接口复制对象,需要具有源对象的读权限和目标对象的写权限:在您进行 授权策略 时,目标对象的授权 action 需要设置为cos:PutObject ,源对象的授权 action 需要设置为cos:GetObject ,更多授权请参见 支持CAM的业务接口
若您使用高级接口的自动分块复制或使用简单接口的分块操作实现分块复制,需要具有源对象的读权限以及目标对象的初始化分块上传、上传对象、完成分块上传的权限:在您进行 授权策略 时,目标对象的授权 action 需要设置为 cos:InitiateMultipartUploadcos:PutObjectcos:CompleteMultipartUpload,源对象的授权 action 需要设置为cos:GetObject ,更多授权请参见 支持CAM的业务接口
若您使用移动对象的接口,需要具有源对象的读权限和删除权限,需要具有目标对象的写权限:在您进行 授权策略 时,目标对象的授权 action 需要设置为cos:PutObject,源对象的授权 action 需要设置为cos:GetObjectcos:DeleteObject,更多授权请参见 支持CAM的业务接口

相关示例

功能名称
描述
示例代码
高级拷贝
高级复制接口封装了简单拷贝、分块拷贝接口,根据文件大小智能的选择拷贝对象的方式。
简单拷贝
简单复制接口可以拷贝一个对象至指定存储桶中,不支持自动分块拷贝。最大支持拷贝不超过5GB的对象,5GB以上对象请使用 高级接口 拷贝。
移动对象
移动对象接口封装了拷贝和删除操作。仅支持当前存储桶内移动对象。如需跨桶移动,可以使用高级拷贝接口和删除对象接口实现。

高级拷贝(推荐)

注意:
自动判断简单拷贝还是分块拷贝,源文件小于 5G 使用简单拷贝,否则使用分块拷贝。
分块大小支持用户自行配置,默认为20MB。
拷贝线程池大小支持用户自行配置,默认5。

前期准备:创建 CosAPI

调用 COS 的接口之前,必须先创建一个 CosAPI 的实例。这个实例用来后续调用请求。
qcloud_cos::CosAPI InitCosAPI() {
uint64_t appid = 12500000000;
std::string region = "ap-guangzhou";// bucket 的地域,请参见 https://www.tencentcloud.com/document/product/436/62?from_cn_redirect=1
std::string secret_id = "************************************"; //用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1
std::string secret_key = "************************************"; //用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1
qcloud_cos::CosConfig config(appid, secret_id, secret_key, region);
qcloud_cos::CosAPI cos_tmp(config);
return cos_tmp;
}

前期准备:使用临时密钥创建 CosAPI

如果要使用临时密钥请求 COS,则需要用临时密钥创建 CosAPI 实例。
qcloud_cos::CosAPI InitCosAPI() {
// 需要已经获取到临时密钥的结果:tmp_secret_id、tmp_secret_key、
// 临时密钥的生成参见 https://www.tencentcloud.com/document/product/436/14048?from_cn_redirect=1#cos-sts-sdk
uint64_t appid = 12500000000;
std::string region = "ap-guangzhou";
std::string tmp_secret_id = "************************************";
std::string tmp_secret_key = "************************************";
std::string tmp_token = "token";
qcloud_cos::CosConfig config(appid, tmp_secret_id, tmp_secret_key, region);
config.SetTmpToken(tmp_token);
qcloud_cos::CosAPI cos_tmp(config);
return cos_tmp;
}

使用案例:拷贝对象

说明:
该 Demo 示范如何使用高级拷贝接口复制对象。
可通过全局设置线程池大小、分块大小。该线程池是每次下载独立的,和高级上传使用同一个配置。

方法原型

CosResult CosAPI::Copy(const CopyReq& req, CopyResp* resp)

请求示例

void CopyDemo(qcloud_cos::CosAPI& cos) {
std::string object_name = "test_dst.txt"; // 复制后对象名称
std::string source = bucket_name + ".cos." + region + ".myqcloud.com/test_src.txt"; ; // 复制源对象

// 设置分块拷贝的分块大小,默认20MB,最大支持5GB,最小支持1MB
// 此配置是全局性配置,主动设置后,后续初始化的所有CopyReq,都使用此配置
CosSysConfig::SetUploadCopyPartSize(20 * 1024 * 1024);
qcloud_cos::CopyReq req(bucket_name, object_name);// 目标存储桶名和对象名
qcloud_cos::CopyResp resp;
req.SetXCosCopySource(source);
qcloud_cos::CosResult result = cos.Copy(req, &resp);
std::cout << "===========================Copy=============================" << std::endl;
PrintResult(result, resp);
std::cout << "============================================================" << std::endl;
}

参数说明

参数名称
描述
类型
req
拷贝文件请求
CopyReq
resp
拷贝文件响应
CopyResp
CopyReq 成员或函数说明:
成员或函数
描述
参数类型
bucket_name
目标存储桶名,可通过构造函数或 set 方法进行设置
存储桶的命名格式为 BucketName-APPID,详情请参见 命名规范
string
object_name
目标对象键(Key),可通过构造函数或 set 方法进行设置
是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/picture.jpg 中,对象键为 doc/picture.jpg,详情请参见 对象键
string
SetXCosCopySource
用于设置拷贝源对象地址。
string
CopyResp 成员函数说明:
成员函数
描述
返回类型
GetVersionId
获取 Object 的版本号, 如果 Bucket 未开启多版本, 返回空字符串
string
GetXCosServerSideEncryption
获取 Server 端加密使用的算法
string
GetEtag
获取存储上传对象的 Etag
string
GetXCosRequestId
获取请求 ID
string

CosSysConfig 类用于进行相关的配置,在该样例中主要成员函数说明如下:
成员函数
描述
参数类型
SetUploadCopyPartSize
设置分块拷贝的块大小,单位:字节(Byte),默认为20MB
设置方法为CosSysConfig::SetUploadCopyPartSize(20 * 1024 * 1024)
uint64_t
SetUploadThreadPoolSize
设置下载线程池大小,默认为5。
设置方法为CosSysConfig::SetUploadThreadPoolSize(5)
unsigned

返回说明

CosResult 主要成员函数说明如下:
成员函数
描述
返回类型
IsSucc
判断是否成功,成功返回 true,失败返回 false
bool
GetHttpStatus
获取 http 状态码
int
GetErrorCode
获取请求失败时获取错误码
string
GetErrorMsg
获取请求失败时获取错误信息
string
GetXCosRequestId
获取请求 ID
string
对 CosResult 的使用样例如下,用户可根据信息选择使用:
void PrintResult(const qcloud_cos::CosResult& result, const qcloud_cos::BaseResp& resp) {
if (result.IsSucc()) {
std::cout << "Request Succ." << std::endl;
std::cout << resp.DebugString() << std::endl;
} else {
std::cout << "ErrorMsg=" << result.GetErrorMsg() << std::endl;
std::cout << "HttpStatus=" << result.GetHttpStatus() << std::endl;
std::cout << "ErrorCode=" << result.GetErrorCode() << std::endl;
std::cout << "ErrorMsg=" << result.GetErrorMsg() << std::endl;
std::cout << "ResourceAddr=" << result.GetResourceAddr() << std::endl;
std::cout << "XCosRequestId=" << result.GetXCosRequestId() << std::endl;
std::cout << "XCosTraceId=" << result.GetXCosTraceId() << std::endl;
}
}

简单拷贝

前期准备:创建 CosAPI

调用 COS 的接口之前,必须先创建一个 CosAPI 的实例。这个实例用来后续调用请求。
qcloud_cos::CosAPI InitCosAPI() {
uint64_t appid = 12500000000;
std::string region = "ap-guangzhou";// bucket 的地域,请参见 https://www.tencentcloud.com/document/product/436/62?from_cn_redirect=1
std::string secret_id = "************************************"; //用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1
std::string secret_key = "************************************"; //用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1
qcloud_cos::CosConfig config(appid, secret_id, secret_key, region);
qcloud_cos::CosAPI cos_tmp(config);
return cos_tmp;
}

前期准备:使用临时密钥创建 CosAPI

如果要使用临时密钥请求 COS,则需要用临时密钥创建 CosAPI 实例。
qcloud_cos::CosAPI InitCosAPI() {
// 需要已经获取到临时密钥的结果:tmp_secret_id、tmp_secret_key、
// 临时密钥的生成参见 https://www.tencentcloud.com/document/product/436/14048?from_cn_redirect=1#cos-sts-sdk
uint64_t appid = 12500000000;
std::string region = "ap-guangzhou";
std::string tmp_secret_id = "************************************";
std::string tmp_secret_key = "************************************";
std::string tmp_token = "token";
qcloud_cos::CosConfig config(appid, tmp_secret_id, tmp_secret_key, region);
config.SetTmpToken(tmp_token);
qcloud_cos::CosAPI cos_tmp(config);
return cos_tmp;
}

使用案例:简单拷贝对象

说明:
该 Demo 演示了如何使用 COS C++ SDK 进行简单拷贝。
最大支持拷贝不超过5GB的对象

方法原型

CosResult CosAPI::PutObjectCopy(const PutObjectCopyReq& req, PutObjectCopyResp* resp)

请求示例

void PutObjectCopyDemo(qcloud_cos::CosAPI& cos) {
std::string object_name = "test_dst.txt"; // 复制目标对象名称
std::string source = bucket_name + ".cos." + region + ".myqcloud.com/test.txt"; // 复制源对象
qcloud_cos::PutObjectCopyReq req(bucket_name, object_name);// 目标存储桶名和对象名
req.SetXCosCopySource(source);
qcloud_cos::PutObjectCopyResp resp;
qcloud_cos::CosResult result = cos.PutObjectCopy(req, &resp);
std::cout << "===================PutObjectCopyResponse====================" << std::endl;
PrintResult(result, resp);
std::cout << "============================================================" << std::endl;
}

参数说明

参数名称
描述
类型
req
拷贝文件请求
PutObjectCopyReq
resp
拷贝文件响应
PutObjectCopyResp
PutObjectCopyReq 成员或函数说明:
成员或函数
描述
参数类型
bucket_name
目标存储桶名,可通过构造函数或 set 方法进行设置
存储桶的命名格式为 BucketName-APPID,详情请参见 命名规范
string
object_name
目标对象键(Key),可通过构造函数或 set 方法进行设置
是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/picture.jpg 中,对象键为 doc/picture.jpg,详情请参见 对象键
string
SetXCosCopySource
用于设置拷贝源对象地址。
string
PutObjectCopyResp 成员函数说明:
成员函数
描述
返回类型
GetVersionId
获取 Object 的版本号, 如果 Bucket 未开启多版本, 返回空字符串
string
GetXCosServerSideEncryption
获取 Server 端加密使用的算法
string
GetEtag
获取存储上传对象的 Etag
string
GetXCosRequestId
获取请求 ID
string

返回说明

CosResult 主要成员函数说明如下:
成员函数
描述
返回类型
IsSucc
判断是否成功,成功返回 true,失败返回 false。
bool
GetHttpStatus
获得 http 状态码。
int
GetErrorCode
请求失败时获取错误码。
string
GetErrorMsg
请求失败时获取错误信息。
string
GetXCosRequestId
获取请求 ID。
string
对 CosResult 的使用样例如下,用户可根据信息选择使用:
void PrintResult(const qcloud_cos::CosResult& result, const qcloud_cos::BaseResp& resp) {
if (result.IsSucc()) {
std::cout << "Request Succ." << std::endl;
std::cout << resp.DebugString() << std::endl;
} else {
std::cout << "ErrorMsg=" << result.GetErrorMsg() << std::endl;
std::cout << "HttpStatus=" << result.GetHttpStatus() << std::endl;
std::cout << "ErrorCode=" << result.GetErrorCode() << std::endl;
std::cout << "ErrorMsg=" << result.GetErrorMsg() << std::endl;
std::cout << "ResourceAddr=" << result.GetResourceAddr() << std::endl;
std::cout << "XCosRequestId=" << result.GetXCosRequestId() << std::endl;
std::cout << "XCosTraceId=" << result.GetXCosTraceId() << std::endl;
}
}

移动对象

前期准备:创建 CosAPI

调用 COS 的接口之前,必须先创建一个 CosAPI 的实例。这个实例用来后续调用请求。
qcloud_cos::CosAPI InitCosAPI() {
uint64_t appid = 12500000000;
std::string region = "ap-guangzhou";// bucket 的地域,请参见 https://www.tencentcloud.com/document/product/436/62?from_cn_redirect=1
std::string secret_id = "************************************"; //用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1
std::string secret_key = "************************************"; //用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1
qcloud_cos::CosConfig config(appid, secret_id, secret_key, region);
qcloud_cos::CosAPI cos_tmp(config);
return cos_tmp;
}

前期准备:使用临时密钥创建 CosAPI

如果要使用临时密钥请求 COS,则需要用临时密钥创建 CosAPI 实例。
qcloud_cos::CosAPI InitCosAPI() {
// 需要已经获取到临时密钥的结果:tmp_secret_id、tmp_secret_key、
// 临时密钥的生成参见 https://www.tencentcloud.com/document/product/436/14048?from_cn_redirect=1#cos-sts-sdk
uint64_t appid = 12500000000;
std::string region = "ap-guangzhou";
std::string tmp_secret_id = "************************************";
std::string tmp_secret_key = "************************************";
std::string tmp_token = "token";
qcloud_cos::CosConfig config(appid, tmp_secret_id, tmp_secret_key, region);
config.SetTmpToken(tmp_token);
qcloud_cos::CosAPI cos_tmp(config);
return cos_tmp;
}

使用案例:移动对象

说明:
该 Demo 演示了如何使用 COS C++ SDK 进行对象移动。
仅支持当前存储桶内移动对象。如需跨桶移动,可以使用高级拷贝接口和删除对象接口实现。

方法原型

CosResult CosAPI::MoveObject(const MoveObjectReq& req)

请求示例

void MoveObjectDemo(qcloud_cos::CosAPI& cos) {
std::string src_object = "test_src.txt";
std::string dst_object = "test_dst.txt";
qcloud_cos::MoveObjectReq req(bucket_name, src_object, dst_object);

qcloud_cos::CosResult result = cos.MoveObject(req);

std::cout << "========================MoveObject==========================" << std::endl;
if (result.IsSucc()) {
std::cout << "MoveObject Succ." << std::endl;
} else {
std::cout << "MoveObject Fail, ErrorMsg: " << result.GetErrorMsg() << std::endl;
}
std::cout << "============================================================" << std::endl;
}

参数说明

参数名称
描述
类型
req
移动对象请求
MoveObjectReq
MoveObjectReq 成员或函数说明:
成员或函数
描述
参数类型
bucket_name
目标和源存储桶名,可通过构造函数或 set 方法进行设置
存储桶的命名格式为 BucketName-APPID,详情请参见 命名规范
string
src_object
源对象键(Key),可通过构造函数或 set 方法进行设置
是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/picture.jpg 中,对象键为 doc/picture.jpg,详情请参见 对象键
string
dst_object
目标对象键
string

返回说明

CosResult 主要成员函数说明如下:
成员函数
描述
返回类型
IsSucc
判断是否成功,成功返回 true,失败返回 false。
bool
GetHttpStatus
获得 http 状态码。
int
GetErrorCode
请求失败时获取错误码。
string
GetErrorMsg
请求失败时获取错误信息。
string
GetXCosRequestId
获取请求 ID。
string
对 CosResult 的使用样例如下,用户可根据信息选择使用:
void PrintResult(const qcloud_cos::CosResult& result, const qcloud_cos::BaseResp& resp) {
if (result.IsSucc()) {
std::cout << "Request Succ." << std::endl;
std::cout << resp.DebugString() << std::endl;
} else {
std::cout << "ErrorMsg=" << result.GetErrorMsg() << std::endl;
std::cout << "HttpStatus=" << result.GetHttpStatus() << std::endl;
std::cout << "ErrorCode=" << result.GetErrorCode() << std::endl;
std::cout << "ErrorMsg=" << result.GetErrorMsg() << std::endl;
std::cout << "ResourceAddr=" << result.GetResourceAddr() << std::endl;
std::cout << "XCosRequestId=" << result.GetXCosRequestId() << std::endl;
std::cout << "XCosTraceId=" << result.GetXCosTraceId() << std::endl;
}
}

API 操作

关于简单操作的 API 接口说明,请参见 PUT Object - Copy 文档。


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈