forked from tencentyun/cos-snippets
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPutBucket.m
136 lines (105 loc) · 4.85 KB
/
PutBucket.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#import <XCTest/XCTest.h>
#import <QCloudCOSXML/QCloudCOSXML.h>
#import <QCloudCOSXML/QCloudUploadPartRequest.h>
#import <QCloudCOSXML/QCloudCompleteMultipartUploadRequest.h>
#import <QCloudCOSXML/QCloudAbortMultipfartUploadRequest.h>
#import <QCloudCOSXML/QCloudMultipartInfo.h>
#import <QCloudCOSXML/QCloudCompleteMultipartUploadInfo.h>
@interface PutBucket : XCTestCase <QCloudSignatureProvider, QCloudCredentailFenceQueueDelegate>
@property (nonatomic) QCloudCredentailFenceQueue* credentialFenceQueue;
@end
@implementation PutBucket
- (void)setUp {
// 注册默认的 COS 服务
QCloudServiceConfiguration* configuration = [QCloudServiceConfiguration new];
configuration.appID = @"1250000000";
configuration.signatureProvider = self;
QCloudCOSXMLEndPoint* endpoint = [[QCloudCOSXMLEndPoint alloc] init];
endpoint.regionName = @"ap-guangzhou";//服务地域名称,可用的地域请参考注释
configuration.endpoint = endpoint;
[QCloudCOSXMLService registerDefaultCOSXMLWithConfiguration:configuration];
[QCloudCOSTransferMangerService registerDefaultCOSTransferMangerWithConfiguration:configuration];
// 脚手架用于获取临时密钥
self.credentialFenceQueue = [QCloudCredentailFenceQueue new];
self.credentialFenceQueue.delegate = self;
}
- (void) fenceQueue:(QCloudCredentailFenceQueue * )queue requestCreatorWithContinue:(QCloudCredentailFenceQueueContinue)continueBlock
{
QCloudCredential* credential = [QCloudCredential new];
//在这里可以同步过程从服务器获取临时签名需要的 secretID,secretKey,expiretionDate 和 token 参数
credential.secretID = @"COS_SECRETID";
credential.secretKey = @"COS_SECRETKEY";
credential.token = @"COS_TOKEN";
/*强烈建议返回服务器时间作为签名的开始时间,用来避免由于用户手机本地时间偏差过大导致的签名不正确 */
credential.startDate = [[[NSDateFormatter alloc] init] dateFromString:@"startTime"]; // 单位是秒
credential.experationDate = [[[NSDateFormatter alloc] init] dateFromString:@"expiredTime"];
QCloudAuthentationV5Creator* creator = [[QCloudAuthentationV5Creator alloc]
initWithCredential:credential];
continueBlock(creator, nil);
}
- (void) signatureWithFields:(QCloudSignatureFields*)fileds
request:(QCloudBizHTTPRequest*)request
urlRequest:(NSMutableURLRequest*)urlRequst
compelete:(QCloudHTTPAuthentationContinueBlock)continueBlock
{
[self.credentialFenceQueue performAction:^(QCloudAuthentationCreator *creator,
NSError *error) {
if (error) {
continueBlock(nil, error);
} else {
QCloudSignature* signature = [creator signatureForData:urlRequst];
continueBlock(signature, nil);
}
}];
}
/**
* 创建存储桶
*/
- (void)putBucket {
//.cssg-snippet-body-start:[objc-put-bucket]
// 创建存储桶
QCloudPutBucketRequest* request = [QCloudPutBucketRequest new];
// 存储桶名称,格式为 BucketName-APPID
request.bucket = @"examplebucket-1250000000";
[request setFinishBlock:^(id outputObject, NSError* error) {
// 可以从 outputObject 中获取服务器返回的 header 信息
NSDictionary* info = (NSDictionary *) outputObject;
}];
[[QCloudCOSXMLService defaultCOSXML] PutBucket:request];
//.cssg-snippet-body-end
}
/**
* 创建存储桶并且授予存储桶权限
*/
- (void)putBucketAndGrantAcl {
//.cssg-snippet-body-start:[objc-put-bucket-and-grant-acl]
QCloudPutBucketRequest* request = [QCloudPutBucketRequest new];
// 存储桶名称,格式为 BucketName-APPID
request.bucket = @"examplebucket-1250000000";
// 授予权限的账号 ID
NSString* appID = @"100000000001";
NSString *ownerIdentifier = [NSString stringWithFormat:@"qcs::cam::uin/%@:uin/%@"
, appID,appID];
NSString *grantString = [NSString stringWithFormat:@"id=\"%@\"",ownerIdentifier];
// 赋予被授权者读写权限
request.grantFullControl = grantString;
// 赋予被授权者读权限
request.grantRead = grantString;
// 赋予被授权者写权限
request.grantWrite = grantString;
[request setFinishBlock:^(id outputObject, NSError* error) {
// 可以从 outputObject 中获取服务器返回的 header 信息
NSDictionary* info = (NSDictionary *) outputObject;
}];
[[QCloudCOSXMLService defaultCOSXML] PutBucket:request];
//.cssg-snippet-body-end
}
// .cssg-methods-pragma
- (void)testPutBucket {
// 创建存储桶
[self putBucket];
// 创建存储桶并且授予存储桶权限
[self putBucketAndGrantAcl];
// .cssg-methods-pragma
}
@end