拷贝Object
更新时间:2022-10-21
简单拷贝Object
基本流程
- 创建BOSClient类的实例。
- 执行BOSClient copyObject方法。
- 返回BOSCopyObjectResponse类实例,可通过eTag/lastModified等属性获取eTag和最后修改时间。
示例代码
Swift
1BOSCopyObjectRequest* request = [[BOSCopyObjectRequest alloc] init];
2request.bucket = @"<bucketname>";
3request.key = @"<objectname>";
4request.source = @"<sourceBucket>/<sourceObject";
5
6__block BOSCopyObjectResponse* response = nil;
7BCETask* task = [client copyObject:request];
8task.then(^(BCEOutput* output) {
9 if (output.response) {
10 response = (BOSCopyObjectResponse*)output.response;
11 NSLog(@"copy obj success!");
12 }
13
14 if (output.error) {
15 NSLog(@"copy obj failure");
16 }
17});
18[task waitUtilFinished];
完整示例
Swift
1#import <BaiduBCEBasic/BaiduBCEBasic.h>
2#import <BaiduBCEBOS/BaiduBCEBOS.h>
3
4void example(void) {
5 // 初始化
6 BCECredentials* credentials = [[BCECredentials alloc] init];
7 credentials.accessKey = @"<access key>";
8 credentials.secretKey = @"<secret key>";
9 BOSClientConfiguration* configuration = [[BOSClientConfiguration alloc] init];
10 configuration.credentials = credentials;
11
12 BOSClient* client = [[BOSClient alloc] initWithConfiguration:configuration];
13
14 BOSCopyObjectRequest* request = [[BOSCopyObjectRequest alloc] init];
15 request.bucket = @"<bucketname>";
16 request.key = @"<objectname>";
17 request.source = @"<sourceBucket>/<sourceObject";
18
19 __block BOSCopyObjectResponse* response = nil;
20 BCETask* task = [client copyObject:request];
21 task.then(^(BCEOutput* output) {
22 if (output.response) {
23 response = (BOSCopyObjectResponse*)output.response;
24 NSLog(@"copy obj success!");
25 }
26
27 if (output.error) {
28 NSLog(@"copy obj failure");
29 }
30 });
31 [task waitUtilFinished];
32}
说明:copyObject 方法返回一个
BOSCopyObjectResponse
对象,该对象中包含了新Object的ETag和修改时间。
指定条件拷贝Object
您也可以通过指定条件来实现Object的拷贝。该功能一般用于如下场景:
- Copy一个Object但重新设置meta。
- 重置某个现有Object的meta(把源和目标设置为同一个Object)。
- 当源Object的eTag与指定的eTag相同时复制;
- 当源Object的eTag与指定的eTag不相同时复制;
- 当源Object的在指定的时间后没有被修改时复制;
- 当源Object的在指定的时间后被修改过时复制;
具体内容如下:
基本流程
- 创建BOSCopyObjectRequest类的实例,传入
<source>
,<ifMatchEtag>
,<ifNotMatchEtag>
,<ifModifiedSince>
,<ifUnmodifiedSince>
,<metadataDirective>
参数。 - 返回BOSCopyObjectResponse类实例,可通过eTag/lastModified属性获取eTag和最后修改时间。
示例代码
Swift
1BOSCopyObjectRequest* request = [[BOSCopyObjectRequest alloc] init];
2request.bucket = @"<bucketname>";
3request.key = @"<objectname>";
4request.source = @"<sourceBucket>/<sourceObject";
5request.metadataDirective = @"replace";
6request.ifModifiedSince = @"Wed, 01 Mar 2006 12:00:00 GMT";
7
8__block BOSCopyObjectResponse* response = nil;
9BCETask* task = [client copyObject:request];
10task.then(^(BCEOutput* output) {
11 if (output.response) {
12 response = (BOSCopyObjectResponse*)output.response;
13 NSLog(@"copy obj success!");
14 }
15
16 if (output.error) {
17 NSLog(@"copy obj failure");
18 }
19});
20[task waitUtilFinished];
说明:
BOSCopyObjectRequest
允许用户修改目的Object的ObjectMeta,同时也提供MatchingETagConstraints
参数的设定。