获取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}