forked from tencentyun/cos-snippets
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathListObjectsVersioning.m
155 lines (119 loc) · 5.75 KB
/
ListObjectsVersioning.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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#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 ListObjectsVersioning : XCTestCase <QCloudSignatureProvider, QCloudCredentailFenceQueueDelegate>
@property (nonatomic) QCloudCredentailFenceQueue* credentialFenceQueue;
@end
@implementation ListObjectsVersioning {
QCloudListVersionsResult* prevPageResult;
}
- (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)listObjectsVersioning {
//.cssg-snippet-body-start:[objc-list-objects-versioning]
QCloudListObjectVersionsRequest* listObjectVersionsRequest =
[[QCloudListObjectVersionsRequest alloc] init];
// 存储桶名称
listObjectVersionsRequest.bucket = @"bucketname";
// 一页请求数据条目数,默认 1000
listObjectVersionsRequest.maxKeys = 100;
[listObjectVersionsRequest setFinishBlock:^(QCloudListVersionsResult * _Nonnull result,
NSError * _Nonnull error) {
// 已删除的文件
NSArray<QCloudDeleteMarker*> *deleteMarker = result.deleteMarker;
// 对象版本条目
NSArray<QCloudVersionContent*> *versionContent = result.versionContent;
if (result.isTruncated) {
// 表示数据被截断,需要拉取下一页数据
self->prevPageResult = result;
}
}];
[[QCloudCOSXMLService defaultCOSXML] ListObjectVersions:listObjectVersionsRequest];
//.cssg-snippet-body-end
}
/**
* 获取对象多版本列表下一页数据
*/
- (void)listObjectsVersioningNextPage {
//.cssg-snippet-body-start:[objc-list-objects-versioning-next-page]
QCloudListObjectVersionsRequest* listObjectVersionsRequest = [[QCloudListObjectVersionsRequest alloc] init];
// 存储桶名称
listObjectVersionsRequest.bucket = @"bucketname";
// 一页请求数据条目数,默认 1000
listObjectVersionsRequest.maxKeys = 100;
//从当前key列出剩余的条目
listObjectVersionsRequest.keyMarker = prevPageResult.nextKeyMarker;
//从当前key的某个版本列出剩余的条目
listObjectVersionsRequest.versionIdMarker = prevPageResult.nextVersionIDMarkder;
[listObjectVersionsRequest setFinishBlock:^(QCloudListVersionsResult * _Nonnull result,
NSError * _Nonnull error) {
// 已删除的文件
NSArray<QCloudDeleteMarker*> *deleteMarker = result.deleteMarker;
// 对象版本条目
NSArray<QCloudVersionContent*> *versionContent = result.versionContent;
if (result.isTruncated) {
// 表示数据被截断,需要拉取下一页数据
self->prevPageResult = result;
}
}];
[[QCloudCOSXMLService defaultCOSXML] ListObjectVersions:listObjectVersionsRequest];
//.cssg-snippet-body-end
}
// .cssg-methods-pragma
- (void)testListObjectsVersioning {
// 获取对象多版本列表第一页数据
[self listObjectsVersioning];
// 获取对象多版本列表下一页数据
[self listObjectsVersioningNextPage];
// .cssg-methods-pragma
}
@end