复制对象
复制对象特性用来为OBS上已经存在的对象创建一个副本。
您可以通过ObsClient.copyObject来复制对象。复制对象时,可重新指定新对象的属性和设置对象权限,且支持条件复制。
- 如果待复制的源对象是归档存储类型,则必须先恢复源对象才能进行复制。
简单复制
以下代码展示了如何进行简单复制:
// 创建ObsClient实例 var obsClient = new ObsClient({ // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/intl/zh-cn/usermanual-ca/ca_01_0003.html access_key_id: process.env.AccessKeyID, secret_access_key: process.env.SecretAccessKey, // 这里以中国-香港为例,其他地区请按实际情况填写 server: 'https://obs.ap-southeast-1.myhuaweicloud.com' }); obsClient.copyObject({ Bucket: 'destbucketname', Key : 'destobjectname', CopySource:'sourcebucketname/sourceobjectname' }, function (err, result) { if(err){ console.log('Error-->' + err); }else{ console.log('Status-->' + result.CommonMsg.Status); } });
使用CopySource参数指定复制时的源对象信息。
重写对象属性
以下代码展示了如何在复制对象时重写对象属性:
// 创建ObsClient实例 var obsClient = new ObsClient({ // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/intl/zh-cn/usermanual-ca/ca_01_0003.html access_key_id: process.env.AccessKeyID, secret_access_key: process.env.SecretAccessKey, // 这里以中国-香港为例,其他地区请按实际情况填写 server: 'https://obs.ap-southeast-1.myhuaweicloud.com' }); obsClient.copyObject({ Bucket: 'destbucketname', Key : 'destobjectname', CopySource:'sourcebucketname/sourceobjectname', ContentType : 'image/jpeg', StorageClass : obsClient.enums.StorageClassWarm, Metadata:{'property':'property-value'}, MetadataDirective : ObsClient.enums.ReplaceMetadata }, function (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可以一起使用。
以下代码展示了如何进行限定条件复制:
// 创建ObsClient实例 var obsClient = new ObsClient({ // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/intl/zh-cn/usermanual-ca/ca_01_0003.html access_key_id: process.env.AccessKeyID, secret_access_key: process.env.SecretAccessKey, // 这里以中国-香港为例,其他地区请按实际情况填写 server: 'https://obs.ap-southeast-1.myhuaweicloud.com' }); obsClient.copyObject({ Bucket: 'destbucketname', Key : 'destobjectname', CopySource:'sourcebucketname/sourceobjectname', CopySourceIfModifiedSince : 'Thu, 31 Dec 2015 16:00:00 GMT', CopySourceIfNoneMatch : 'none-match-etag' }, function (err, result) { if(err){ console.log('Error-->' + err); }else{ console.log('Status-->' + result.CommonMsg.Status); } });
重写对象访问权限
以下代码展示了如何在复制对象时重写对象访问权限:
// 创建ObsClient实例 var obsClient = new ObsClient({ // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 前端本身没有process对象,可以使用webpack类打包工具定义环境变量,就可以在代码中运行了。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/intl/zh-cn/usermanual-ca/ca_01_0003.html access_key_id: process.env.AccessKeyID, secret_access_key: process.env.SecretAccessKey, // 这里以中国-香港为例,其他地区请按实际情况填写 server: 'https://obs.ap-southeast-1.myhuaweicloud.com' }); obsClient.copyObject({ Bucket: 'destbucketname', Key : 'destobjectname', CopySource:'sourcebucketname/sourceobjectname', // 复制时重写对象访问权限为公共读 ACL : obsClient.enums.AclPublicRead }, function (err, result) { if(err){ console.log('Error-->' + err); }else{ console.log('Status-->' + result.CommonMsg.Status); } });
使用ACL参数重写对象访问权限。