文档首页/ 对象存储服务 OBS/ SDK参考/ BrowserJS/ 对象相关接口/ 对象基本操作/ 批量恢复归档或深度归档存储对象
更新时间:2026-06-01 GMT+08:00
分享

批量恢复归档或深度归档存储对象

功能说明

您可以使用列举对象和恢复归档或深度归档存储对象接口实现批量恢复。

代码样例

本示例用于批量恢复对象。

// 认证用的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 bucket = 'examplebucket';
// 要恢复的对象前缀(为空则恢复所有对象)
var prefix = '';
// 恢复天数
var days = 1;
// 恢复模式:Expedited(快速)、Standard(标准)
var tier = 'Expedited';
async function restoreObjects() {
    var marker = '';
    var totalCount = 0;
    console.log('开始列举并恢复对象...');
    while (true) {
        var listParams = { Bucket: bucket };
        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 key = listResult.InterfaceResult.Contents[i].Key;
                    totalCount++;
                    try {
                        var params = {
                            Bucket: bucket,
                            Key: key,
                            Days: days,
                            Tier: tier
                        };
                        var result = await obsClient.restoreObject(params);
                        if (result.CommonMsg.Status <= 300) {
                            console.log('[' + totalCount + '] 成功: ' + key);
                        } else {
                            console.log('[' + totalCount + '] 失败: ' + key + ' - ' + result.CommonMsg.Message);
                        }
                    } catch (error) {
                        console.log('[' + totalCount + '] 异常: ' + key + ' - ' + error);
                    }
                }
            }
            if (listResult.InterfaceResult.IsTruncated == 'true') {
                marker = listResult.InterfaceResult.NextMarker;
            } else {
                break;
            }
        } else {
            console.log('列举对象失败:', listResult.CommonMsg.Message);
            return;
        }
    }
    console.log('批量恢复完成,共处理 ' + totalCount + ' 个对象!');
}
restoreObjects()

相关文档