更新时间:2026-06-01 GMT+08:00
批量复制对象
功能说明
复制对象特性用来为OBS上已经存在的对象创建一个副本。
您可以通过列举对象和复制对象接口实现批量复制对象。复制对象时,可重新指定新对象的属性和设置对象权限,且支持条件复制。
- 如果待复制的源对象是归档存储类型,则必须先恢复源对象才能进行复制。
代码样例
本示例用于批量复制对象。
// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。
// 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。
// 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
const AK = process.env.AccessKeyID
const SK = process.env.SecretAccessKey
// 【可选】如果使用临时AKSK和SecurityToken访问OBS,则同样推荐通过环境变量获取
const security_token= process.env.SecurityToken
// server填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。
const server = "https://obs.cn-north-4.myhuaweicloud.com"
// 创建ObsClient实例
var obsClient = new ObsClient({
access_key_id: AK,
secret_access_key: SK,
server: server
});
// 源桶名
var sourceBucket = 'examplebucket';
// 目标桶名
var destBucket = 'destexamplebucket';
// 要复制的对象前缀(为空则复制所有对象)
var prefix = '';
// 目标对象前缀(复制后添加此前缀)
var destPrefix = 'backup/';
async function copyObjects() {
var marker = '';
var totalCount = 0;
console.log('开始列举并复制对象...');
console.log('源桶: ' + sourceBucket + ', 目标桶: ' + destBucket);
while (true) {
var listParams = { Bucket: sourceBucket };
if (prefix) {
listParams.Prefix = prefix;
}
if (marker) {
listParams.Marker = marker;
}
var listResult = await obsClient.listObjects(listParams);
if (listResult.CommonMsg.Status <= 300) {
if (listResult.InterfaceResult.Contents) {
var batchCount = listResult.InterfaceResult.Contents.length;
console.log('本批获取 ' + batchCount + ' 个对象,开始复制...');
for (var i = 0; i < listResult.InterfaceResult.Contents.length; i++) {
var sourceKey = listResult.InterfaceResult.Contents[i].Key;
var destKey = destPrefix + sourceKey;
totalCount++;
try {
var params = {
Bucket: destBucket,
Key: destKey,
CopySource: sourceBucket + '/' + sourceKey
};
var result = await obsClient.copyObject(params);
if (result.CommonMsg.Status <= 300) {
console.log('[' + totalCount + '] 成功: ' + sourceKey + ' -> ' + destKey);
} else {
console.log('[' + totalCount + '] 失败: ' + sourceKey + ' - ' + result.CommonMsg.Message);
}
} catch (error) {
console.log('[' + totalCount + '] 异常: ' + sourceKey + ' - ' + error);
}
}
}
if (listResult.InterfaceResult.IsTruncated == 'true') {
marker = listResult.InterfaceResult.NextMarker;
} else {
break;
}
} else {
console.log('列举对象失败:', listResult.CommonMsg.Message);
return;
}
}
console.log('批量复制完成,共处理 ' + totalCount + ' 个对象!');
}
copyObjects()
使用CopySource参数指定复制时的源对象信息。
父主题: 对象基本操作