上传Object
更新时间:2022-10-21
最简单的上传
基本流程
- 创建BOSClient类的实例。
- 调用BOSClient putObject方法,可以通过如下二种方式上传Object:文件、二进制数据的形式。
- 对返回的BOSPutObjectResponse类型实例,可以执行获取eTag操作。
示例代码
Swift
1BOSObjectContent* content = [[BOSObjectContent alloc] init];
2// 以文件方式
3content.objectData.file = @"<file path>";
4
5// 或者以二进制数据方式
6NSData* data = [[NSData alloc] init];
7content.objectData.data = data;
8
9BOSPutObjectRequest* request = [[BOSPutObjectRequest alloc] init];
10request.bucket = @"<bucketname>";
11request.key = @"<objectname>";
12request.objectContent = content;
13
14__block BOSPutObjectResponse* response = nil;
15BCETask* task = [client putObject:request];
16task.then(^(BCEOutput* output) {
17 if (output.progress) {
18 NSLog(@"put object progress is %@", output.progress);
19 }
20
21 if (output.response) {
22 response = (BOSPutObjectResponse*)output.response;
23 NSLog(@"put object success!");
24 }
25
26 if (output.error) {
27 NSLog(@"put object failure");
28 }
29});
30[task waitUtilFinished];
说明:Object以文件的形式上传到BOS中,putObject函数支持不超过5GB的Object上传。在putObject请求处理成功后,BOS会在Header中返回Object的ETag作为文件标识。
完整示例
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 BOSObjectContent* content = [[BOSObjectContent alloc] init];
15 // 以文件方式
16 content.objectData.file = @"<file path>";
17
18 // 或者以二进制数据方式
19 NSData* data = [[NSData alloc] init];
20 content.objectData.data = data;
21
22 BOSPutObjectRequest* request = [[BOSPutObjectRequest alloc] init];
23 request.bucket = @"<bucketname>";
24 request.key = @"<objectname>";
25 request.objectContent = content;
26
27 __block BOSPutObjectResponse* response = nil;
28 BCETask* task = [client putObject:request];
29 task.then(^(BCEOutput* output) {
30 if (output.progress) {
31 NSLog(@"put object progress is %@", output.progress);
32 }
33
34 if (output.response) {
35 response = (BOSPutObjectResponse*)output.response;
36 NSLog(@"put object success!");
37 }
38
39 if (output.error) {
40 NSLog(@"put object failure");
41 }
42 });
43 [task waitUtilFinished];
44}
设定Object的Http Header
BOS支持您在上传object时设定Http Header。
基本流程
- 创建BOSObjectMetadata类的实例。
- 设定BOSObjectMetadata实例的contentEncoding/contentType/contentDisposition等字段。
- 将BOSObjectMetadata实例设置到BOSPutObjectRequest的objectContent.metadata字段上。
示例代码
Swift
1BOSObjectMetadata* metadata = [[BOSObjectMetadata alloc] init];
2metadata.contentEncoding = @"<encoding>";
3metadata.contentDisposition = @"<content disposition>";
4content.metadata = metadata;
完整示例
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 BOSObjectContent* content = [[BOSObjectContent alloc] init];
15 // 以文件方式
16 content.objectData.file = @"<file path>";
17
18 // 或者以二进制数据方式
19 NSData* data = [[NSData alloc] init];
20 content.objectData.data = data;
21
22 BOSObjectMetadata* metadata = [[BOSObjectMetadata alloc] init];
23 metadata.contentEncoding = @"<encoding>";
24 metadata.contentDisposition = @"<content disposition>";
25 content.metadata = metadata;
26
27 BOSPutObjectRequest* request = [[BOSPutObjectRequest alloc] init];
28 request.bucket = @"<bucketname>";
29 request.key = @"<Objectname>";
30 request.objectContent = content;
31
32 __block BOSPutObjectResponse* response = nil;
33 BCETask* task = [client putObject:request];
34 task.then(^(BCEOutput* output) {
35 if (output.progress) {
36 NSLog(@"put object progress is %@", output.progress);
37 }
38
39 if (output.response) {
40 response = (BOSPutObjectResponse*)output.response;
41 NSLog(@"put object success!");
42 }
43
44 if (output.error) {
45 NSLog(@"put object failure");
46 }
47 });
48 [task waitUtilFinished];
49}
用户自定义元数据
BOS支持用户自定义元数据来对Object进行描述。
基本流程
- 创建BOSObjectMetadata类的实例。
- 将自定义元数据字典设置到BOSObjectMetadata的userMetadata字段。
示例代码
Swift
1BOSObjectMetadata* metadata = [[BOSObjectMetadata alloc] init];
2metadata.contentEncoding = @"<encoding>";
3metadata.contentDisposition = @"<content disposition>";
4content.metadata = metadata;
5
6NSDictionary* customMetadata = @{
7 @"name" : @"my-data"
8};
9content.metadata.userMetadata = customMetadata;
说明:在上面代码中,用户自定义了一个名字为”name”,值为”my-data”的元数据。当用户下载此Object的时候,此元数据也可以一并得到。一个Object可以有多个类似的参数,但所有的User Meta总大小不能超过2KB。
完整示例
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 BOSObjectContent* content = [[BOSObjectContent alloc] init];
15 // 以文件方式
16 content.objectData.file = @"<file path>";
17
18 // 或者以二进制数据方式
19 NSData* data = [[NSData alloc] init];
20 content.objectData.data = data;
21
22 BOSObjectMetadata* metadata = [[BOSObjectMetadata alloc] init];
23 metadata.contentEncoding = @"<encoding>";
24 metadata.contentDisposition = @"<content disposition>";
25 content.metadata = metadata;
26
27 NSDictionary* customMetadata = @{
28 @"name" : @"my-data"
29 };
30 content.metadata.userMetadata = customMetadata;
31
32 BOSPutObjectRequest* request = [[BOSPutObjectRequest alloc] init];
33 request.bucket = @"<bucketname>";
34 request.key = @"<objectname>";
35 request.objectContent = content;
36
37 __block BOSPutObjectResponse* response = nil;
38 BCETask* task = [client putObject:request];
39 task.then(^(BCEOutput* output) {
40 if (output.progress) {
41 NSLog(@"put object progress is %@", output.progress);
42 }
43
44 if (output.response) {
45 response = (BOSPutObjectResponse*)output.response;
46 NSLog(@"put object success!");
47 }
48
49 if (output.error) {
50 NSLog(@"put object failure");
51 }
52 });
53 [task waitUtilFinished];
54}