复制对象
开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。
复制对象特性用来为OBS上已经存在的对象创建一个副本。
您可以通过ObsClient.copyObject来复制对象。复制对象时,可重新指定新对象的属性和设置对象权限,且支持条件复制。
- 如果待复制的源对象是归档存储类型,则必须先恢复源对象才能进行复制。
简单复制
以下代码展示了如何进行简单复制:
// 引入obs库 // 使用npm安装 var ObsClient = require('esdk-obs-nodejs'); // 使用源码安装 // var ObsClient = require('./lib/obs'); // 创建ObsClient实例 var obsClient = new ObsClient({ //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html access_key_id: process.env.ACCESS_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, server : 'https://your-endpoint' }); obsClient.copyObject({ Bucket: 'destbucketname', Key : 'destobjectname', CopySource:'sourcebucketname/sourceobjectname' }, (err, result) => { if(err){ console.log('Error-->' + err); }else{ console.log('Status-->' + result.CommonMsg.Status); } });
使用CopySource参数指定复制时的源对象信息。
重写对象属性
以下代码展示了如何在复制对象时重写对象属性:
// 引入obs库 // 使用npm安装 var ObsClient = require('esdk-obs-nodejs'); // 使用源码安装 // var ObsClient = require('./lib/obs'); // 创建ObsClient实例 var obsClient = new ObsClient({ //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html access_key_id: process.env.ACCESS_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, server : 'https://your-endpoint' }); obsClient.copyObject({ Bucket: 'destbucketname', Key : 'destobjectname', CopySource:'sourcebucketname/sourceobjectname', ContentType : 'image/jpeg', StorageClass : obsClient.enums.StorageClassWarm, Metadata:{'property':'property-value'}, MetadataDirective : ObsClient.enums.ReplaceMetadata }, (err, result) => { if(err){ console.log('Error-->' + err); }else{ console.log('Status-->' + result.CommonMsg.Status); } });
使用Metadata参数指定待重写的自定义对象属性;使用MetadataDirective参数指定重写选项,支持ObsClient.enums.CopyMetadata(从源对象复制)和ObsClient.enums.ReplaceMetadata(重写)两个值。
限定条件复制
复制对象时,可以指定一个或多个限定条件,满足限定条件时则进行复制,否则返回异常码,复制对象失败。
您可以使用的限定条件如下:
参数 |
作用 |
格式 |
---|---|---|
CopySourceIfModifiedSince |
如果源对象的修改时间晚于该参数值指定的时间,则进行复制,否则返回异常码。 |
符合http://www.ietf.org/rfc/rfc2616.txt规定格式的HTTP时间字符串。 |
CopySourceIfUnmodifiedSince |
如果源对象的修改时间早于该参数值指定的时间,则进行复制,否则返回异常码。 |
符合http://www.ietf.org/rfc/rfc2616.txt规定格式的HTTP时间字符串。 |
CopySourceIfMatch |
如果源对象的ETag值与该参数值相同,则进行复制,否则返回异常码。 |
字符串。 |
CopySourceIfNoneMatch |
如果源对象的ETag值与该参数值不相同,则进行复制,否则返回异常码。 |
字符串。 |
- 源对象的ETag值是指源对象数据的MD5校验值。
- 如果包含CopySourceIfUnmodifiedSince并且不符合,或者包含CopySourceIfMatch并且不符合,或者包含CopySourceIfModifiedSince并且不符合,或者包含CopySourceIfNoneMatch并且不符合,则复制失败,返回异常码:412 precondition failed。
- CopySourceIfModifiedSince和CopySourceIfNoneMatch可以一起使用;CopySourceIfUnmodifiedSince和CopySourceIfMatch可以一起使用。
以下代码展示了如何进行限定条件复制:
// 引入obs库 // 使用npm安装 var ObsClient = require('esdk-obs-nodejs'); // 使用源码安装 // var ObsClient = require('./lib/obs'); // 创建ObsClient实例 var obsClient = new ObsClient({ //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html access_key_id: process.env.ACCESS_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, server : 'https://your-endpoint' }); obsClient.copyObject({ Bucket: 'destbucketname', Key : 'destobjectname', CopySource:'sourcebucketname/sourceobjectname', CopySourceIfModifiedSince : 'Thu, 31 Dec 2015 16:00:00 GMT', CopySourceIfNoneMatch : 'none-match-etag' }, (err, result) => { if(err){ console.log('Error-->' + err); }else{ console.log('Status-->' + result.CommonMsg.Status); } });
重写对象访问权限
以下代码展示了如何在复制对象时重写对象访问权限:
// 引入obs库 // 使用npm安装 var ObsClient = require('esdk-obs-nodejs'); // 使用源码安装 // var ObsClient = require('./lib/obs'); // 创建ObsClient实例 var obsClient = new ObsClient({ //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html access_key_id: process.env.ACCESS_KEY_ID, secret_access_key: process.env.SECRET_ACCESS_KEY, server : 'https://your-endpoint' }); obsClient.copyObject({ Bucket: 'destbucketname', Key : 'destobjectname', CopySource:'sourcebucketname/sourceobjectname', // 复制时重写对象访问权限为公共读 ACL : obsClient.enums.AclPublicRead }, (err, result) => { if(err){ console.log('Error-->' + err); }else{ console.log('Status-->' + result.CommonMsg.Status); } });
使用ACL参数重写对象访问权限。