获取Object
更新时间:2022-10-21
简单的获取Object
用户可以通过如下代码将Object读取到内存中。
基本流程
- 创建BOSClient类的实例。
- 执行BOSClient getObject方法,会返回BOSGetObjectResponse实例。
- 访问BOSGetObjectResponse示例的objectContent.objectData.data属性,获取数据。
示例代码
                Swift
                
            
            1__block BOSGetObjectResponse* getObjResponse = nil;
2BOSGetObjectRequest* getObjRequest = [[BOSGetObjectRequest alloc] init];
3getObjRequest.bucket = @"<bucketname>";
4getObjRequest.key = @"<objectname>";
5BCETask* task = [client getObject:getObjRequest];
6task.then(^(BCEOutput* output) {
7  if (output.response) {
8      getObjResponse = (BOSGetObjectResponse*)output.response;
9      NSLog(@"get object success!");
10  }
11
12  if (output.error) {
13      NSLog(@"get object failure with %@", outpu****t.error);
14  }
15
16  if (output.progress) {
17      NSLog(@"the get object progress is %@", output.progress);
18  }
19});
20[task waitUtilFinished];
21
22// 获取内存中的数据
23NSData* data = getObjResponse.objectContent.objectData.data;注意:
- BOSObjectContent中包含了Object的各种信息,包含Object所在的Bucket、Object的名称、MetaData以及数据存储。
- BOSObjectMetadata中包含了Object上传时定义的ETag,Http Header以及自定义的元数据。
- 通过BOSObjectContent的objectData属性,获取到Object的数据。
完整示例
                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    __block BOSGetObjectResponse* getObjResponse = nil;
15    BOSGetObjectRequest* getObjRequest = [[BOSGetObjectRequest alloc] init];
16    getObjRequest.bucket = @"<bucketname>";
17    getObjRequest.key = @"<objectname>";
18    BCETask* task = [client getObject:getObjRequest];
19    task.then(^(BCEOutput* output) {
20        if (output.response) {
21            getObjResponse = (BOSGetObjectResponse*)output.response;
22            NSLog(@"get object success!");
23        }
24
25        if (output.error) {
26            NSLog(@"get object failure with %@", output.error);
27        }
28
29        if (output.progress) {
30            NSLog(@"the get object progress is %@", output.progress);
31        }
32    });
33    [task waitUtilFinished];
34
35    NSData* data = getObjResponse.objectContent.objectData.data;
36}下载Object的一部分内容
基本流程
- 创建BOSGetObjectRequest类的实例。
- BOSGetObjectRequestt实例的rangeStart和/或rangeEnd字段。
- 执行client getObject操作。
示例代码
                Swift
                
            
            1__block BOSGetObjectResponse* getObjResponse = nil;
2BOSGetObjectRequest* getObjRequest = [[BOSGetObjectRequest alloc] init];
3getObjRequest.bucket = @"<bucketname>";
4getObjRequest.key = @"<objectname>";
5
6// 获取前100个字节
7getObjRequest.rangeStart = @"0";
8getObjRequest.rangeEnd = @"99";
9
10BCETask* task = [client getObject:getObjRequest];
11task.then(^(BCEOutput* output) {
12    if (output.response) {
13        getObjResponse = (BOSGetObjectResponse*)output.response;
14        NSLog(@"get object success!");
15    }
16
17    if (output.error) {
18        NSLog(@"get object failure with %@", output.error);
19    }
20
21    if (output.progress) {
22        NSLog(@"the get object progress is %@", output.progress);
23    }
24});
25[task waitUtilFinished];
26
27NSData* data = getObjResponse.objectContent.objectData.data;说明:用户可以用此功能实现文件的分段下载和断点续传。
下载Object到指定路径
用户可以通过如下代码直接将Object下载到指定路径。
基本流程
- 创建BOSGetObjectRequest类的实例。
- 设置要保存的文件名到BOSGetObjectRequest实例的file字段。
- 执行client getObject操作。
- Object可以直接下载到指定路径。
示例代码
                Swift
                
            
            1__block BOSGetObjectResponse* getObjResponse = nil;
2BOSGetObjectRequest* getObjRequest = [[BOSGetObjectRequest alloc] init];
3getObjRequest.bucket = @"<bucketname>";
4getObjRequest.key = @"<objectname>";
5
6// 设置保存到的文件路径
7getObjRequest.file = @"<file>";
8
9BCETask* task = [client getObject:getObjRequest];
10task.then(^(BCEOutput* output) {
11    if (output.response) {
12        getObjResponse = (BOSGetObjectResponse*)output.response;
13        NSLog(@"get object success!");
14    }
15
16    if (output.error) {
17        NSLog(@"get object failure with %@", output.error);
18    }
19
20    if (output.progress) {
21        NSLog(@"the get object progress is %@", output.progress);
22    }
23});
24[task waitUtilFinished];获取Object的storageClass
Object的storage class属性分为STANDARD(标准存储), STANDARD_IA(低频存储)和COLD(冷存储)。
示例代码:
                Swift
                
            
            1__block BOSGetObjectMetadataResponse* getObjMetaResponse = nil;
2BCETask* task = [client getObjectMetadata:@"<bucketname>" objectKey:@"<objectname>"];
3task.then(^(BCEOutput* output) {
4    if (output.response) {
5        getObjMetaResponse = (BOSGetObjectMetadataResponse*)output.response;
6        NSString storageClass = getObjMetaResponse.storageClass;
7        NSLog(@"get object storageClass success!");
8    }
9
10    if (output.error) {
11        NSLog(@"get object storageClass failure");
12    }
13});
14[task waitUtilFinished];只获取ObjectMetadata
通过getObjectMetadata 方法可以只获取 Object metadata 而不获取Object的实体。
示例代码:
                Swift
                
            
            1__block BOSGetObjectMetadataResponse* getObjMetaResponse = nil;
2BCETask* task = [client getObjectMetadata:@"<bucketname>" objectKey:@"<objectname>"];
3task.then(^(BCEOutput* output) {
4    if (output.response) {
5        getObjMetaResponse = (BOSGetObjectMetadataResponse*)output.response;
6        NSLog(@"get object metadata success!");
7    }
8
9    if (output.error) {
10        NSLog(@"get object metadata failure");
11    }
12});
13[task waitUtilFinished];获取Object的URL
您可以通过如下代码获取指定Object的URL,该功能通常用于您将Object的URL临时分享给其他用户的场景。
基本流程
- 创建BOSClient类的实例。
- 执行BOSClient generatePresignedUrl方法。
- 返回一个Object的URL。
示例代码
                Swift
                
            
            1__block BOSGeneratePresignedUrlResponse *generateObjetUrlRes = nil;
2  BCEOutput_ output = [client generatePresignedUrl:@"<bucketname>" objectKey:@"<objectname>" expirationInSeconds:<ExpirationInSeconds>];
3  if (output.response) {
4      generateObjetUrlRes = (BOSGeneratePresignedUrlResponse_)output.response;
5      NSLog(@"get url success, the usrlstting is : %@", [generateObjetUrlRes.objectUrl absoluteString]);
6  }
7  if (output.error) {
8      NSLog(@"get url failure, error : %@:", output.error);
9  }说明: ExpirationInSeconds为指定的URL有效时长,时间从当前时间算起,为可选参数,不配置时系统默认值为1800秒。如果要设置为永久不失效的时间,可以将ExpirationInSeconds参数设置为 -1,不可设置为其他负数。
完整示例
                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    __block BOSGeneratePresignedUrlResponse *generateObjetUrlRes = nil;
15      BCEOutput* output = [client generatePresignedUrl:@"<bucketname>" objectKey:@"<objectname>" expirationInSeconds:<ExpirationInSeconds>];
16    if (output.response) {
17    generateObjetUrlRes = 	(BOSGeneratePresignedUrlResponse*)output.response;
18    NSLog(@"get url success, the usrlstting is : %@", [generateObjetUrlRes.objectUrl absoluteString]);
19    }
20    if (output.error) {
21    NSLog(@"get url failure, error : %@:", output.error);
22    }
23}