1 /*
2 * Copyright 2009-2017 Alibaba Cloud All rights reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include <alibabacloud/oss/OssClient.h>
18 #include "auth/SimpleCredentialsProvider.h"
19 #include "http/CurlHttpClient.h"
20 #include "OssClientImpl.h"
21 #include <fstream>
22 #include "utils/LogUtils.h"
23 #include "utils/Crc64.h"
24
25 using namespace AlibabaCloud::OSS;
26
27 static bool SdkInitDone = false;
28
IsSdkInitialized()29 bool AlibabaCloud::OSS::IsSdkInitialized()
30 {
31 return SdkInitDone;
32 }
33
InitializeSdk()34 void AlibabaCloud::OSS::InitializeSdk()
35 {
36 if (IsSdkInitialized())
37 return;
38 InitLogInner();
39 CurlHttpClient::initGlobalState();
40 SdkInitDone = true;
41 }
42
ShutdownSdk()43 void AlibabaCloud::OSS::ShutdownSdk()
44 {
45 if (!IsSdkInitialized())
46 return;
47
48 CurlHttpClient::cleanupGlobalState();
49 DeinitLogInner();
50 SdkInitDone = false;
51 }
52 ///////////////////////////////////////////////////////////////////////////////////////////////////////
53
SetLogLevel(LogLevel level)54 void AlibabaCloud::OSS::SetLogLevel(LogLevel level)
55 {
56 SetLogLevelInner(level);
57 }
58
SetLogCallback(LogCallback callback)59 void AlibabaCloud::OSS::SetLogCallback(LogCallback callback)
60 {
61 SetLogCallbackInner(callback);
62 }
63 ////////////////////////////////////////////////////////////////////////////////////////////////////
64
ComputeCRC64(uint64_t crc,void * buf,size_t len)65 uint64_t AlibabaCloud::OSS::ComputeCRC64(uint64_t crc, void *buf, size_t len)
66 {
67 return CRC64::CalcCRC(crc, buf, len);
68 }
69
CombineCRC64(uint64_t crc1,uint64_t crc2,uintmax_t len2)70 uint64_t AlibabaCloud::OSS::CombineCRC64(uint64_t crc1, uint64_t crc2, uintmax_t len2)
71 {
72 return CRC64::CombineCRC(crc1, crc2, len2);
73 }
74 ///////////////////////////////////////////////////////////////////////////////////////////////////////
75
OssClient(const std::string & endpoint,const std::string & accessKeyId,const std::string & accessKeySecret,const ClientConfiguration & configuration)76 OssClient::OssClient(const std::string &endpoint, const std::string & accessKeyId, const std::string & accessKeySecret, const ClientConfiguration & configuration) :
77 OssClient(endpoint, accessKeyId, accessKeySecret, "", configuration)
78 {
79 }
80
OssClient(const std::string & endpoint,const std::string & accessKeyId,const std::string & accessKeySecret,const std::string & securityToken,const ClientConfiguration & configuration)81 OssClient::OssClient(const std::string &endpoint, const std::string & accessKeyId, const std::string & accessKeySecret, const std::string & securityToken,
82 const ClientConfiguration & configuration) :
83 OssClient(endpoint, std::make_shared<SimpleCredentialsProvider>(accessKeyId, accessKeySecret, securityToken), configuration)
84 {
85 }
86
OssClient(const std::string & endpoint,const Credentials & credentials,const ClientConfiguration & configuration)87 OssClient::OssClient(const std::string &endpoint, const Credentials &credentials, const ClientConfiguration &configuration) :
88 OssClient(endpoint, std::make_shared<SimpleCredentialsProvider>(credentials), configuration)
89 {
90 }
91
OssClient(const std::string & endpoint,const std::shared_ptr<CredentialsProvider> & credentialsProvider,const ClientConfiguration & configuration)92 OssClient::OssClient(const std::string &endpoint, const std::shared_ptr<CredentialsProvider>& credentialsProvider, const ClientConfiguration & configuration) :
93 client_(std::make_shared<OssClientImpl>(endpoint, credentialsProvider, configuration))
94 {
95 }
96
~OssClient()97 OssClient::~OssClient()
98 {
99 }
100
101 #if !defined(OSS_DISABLE_BUCKET)
102
ListBuckets() const103 ListBucketsOutcome OssClient::ListBuckets() const
104 {
105 return client_->ListBuckets(ListBucketsRequest());
106 }
107
ListBuckets(const ListBucketsRequest & request) const108 ListBucketsOutcome OssClient::ListBuckets(const ListBucketsRequest &request) const
109 {
110 return client_->ListBuckets(request);
111 }
112
ListBucketInventoryConfigurations(const ListBucketInventoryConfigurationsRequest & request) const113 ListBucketInventoryConfigurationsOutcome OssClient::ListBucketInventoryConfigurations(const ListBucketInventoryConfigurationsRequest& request) const
114 {
115 return client_->ListBucketInventoryConfigurations(request);
116 }
117
CreateBucket(const std::string & bucket,StorageClass storageClass) const118 CreateBucketOutcome OssClient::CreateBucket(const std::string &bucket, StorageClass storageClass) const
119 {
120 return client_->CreateBucket(CreateBucketRequest(bucket, storageClass));
121 }
122
CreateBucket(const std::string & bucket,StorageClass storageClass,CannedAccessControlList acl) const123 CreateBucketOutcome OssClient::CreateBucket(const std::string &bucket, StorageClass storageClass, CannedAccessControlList acl) const
124 {
125 return client_->CreateBucket(CreateBucketRequest(bucket, storageClass, acl));
126 }
127
CreateBucket(const CreateBucketRequest & request) const128 CreateBucketOutcome OssClient::CreateBucket(const CreateBucketRequest &request) const
129 {
130 return client_->CreateBucket(request);
131 }
132
SetBucketAcl(const std::string & bucket,CannedAccessControlList acl) const133 VoidOutcome OssClient::SetBucketAcl(const std::string &bucket, CannedAccessControlList acl) const
134 {
135 return client_->SetBucketAcl(SetBucketAclRequest(bucket, acl));
136 }
137
SetBucketAcl(const SetBucketAclRequest & request) const138 VoidOutcome OssClient::SetBucketAcl(const SetBucketAclRequest& request) const
139 {
140 return client_->SetBucketAcl(request);
141 }
142
SetBucketLogging(const std::string & bucket,const std::string & targetBucket,const std::string & targetPrefix) const143 VoidOutcome OssClient::SetBucketLogging(const std::string &bucket, const std::string &targetBucket, const std::string &targetPrefix) const
144 {
145 return client_->SetBucketLogging(SetBucketLoggingRequest(bucket, targetBucket, targetPrefix));
146 }
147
SetBucketLogging(const SetBucketLoggingRequest & request) const148 VoidOutcome OssClient::SetBucketLogging(const SetBucketLoggingRequest& request) const
149 {
150 return client_->SetBucketLogging(request);
151 }
152
SetBucketWebsite(const std::string & bucket,const std::string & indexDocument) const153 VoidOutcome OssClient::SetBucketWebsite(const std::string &bucket, const std::string &indexDocument) const
154 {
155 SetBucketWebsiteRequest request(bucket);
156 request.setIndexDocument(indexDocument);
157 return client_->SetBucketWebsite(request);
158 }
159
SetBucketWebsite(const std::string & bucket,const std::string & indexDocument,const std::string & errorDocument) const160 VoidOutcome OssClient::SetBucketWebsite(const std::string &bucket, const std::string &indexDocument, const std::string &errorDocument) const
161 {
162 SetBucketWebsiteRequest request(bucket);
163 request.setIndexDocument(indexDocument);
164 request.setErrorDocument(errorDocument);
165 return client_->SetBucketWebsite(request);
166 }
167
SetBucketWebsite(const SetBucketWebsiteRequest & request) const168 VoidOutcome OssClient::SetBucketWebsite(const SetBucketWebsiteRequest& request) const
169 {
170 return client_->SetBucketWebsite(request);
171 }
172
SetBucketReferer(const std::string & bucket,const RefererList & refererList,bool allowEmptyReferer) const173 VoidOutcome OssClient::SetBucketReferer(const std::string &bucket, const RefererList &refererList, bool allowEmptyReferer) const
174 {
175 return client_->SetBucketReferer(SetBucketRefererRequest(bucket, refererList, allowEmptyReferer));
176 }
177
SetBucketReferer(const SetBucketRefererRequest & request) const178 VoidOutcome OssClient::SetBucketReferer(const SetBucketRefererRequest& request) const
179 {
180 return client_->SetBucketReferer(request);
181 }
182
SetBucketLifecycle(const SetBucketLifecycleRequest & request) const183 VoidOutcome OssClient::SetBucketLifecycle(const SetBucketLifecycleRequest& request) const
184 {
185 return client_->SetBucketLifecycle(request);
186 }
187
SetBucketCors(const std::string & bucket,const CORSRuleList & rules) const188 VoidOutcome OssClient::SetBucketCors(const std::string &bucket, const CORSRuleList &rules) const
189 {
190 SetBucketCorsRequest request(bucket);
191 request.setCORSRules(rules);
192 return client_->SetBucketCors(request);
193 }
194
SetBucketCors(const SetBucketCorsRequest & request) const195 VoidOutcome OssClient::SetBucketCors(const SetBucketCorsRequest& request) const
196 {
197 return client_->SetBucketCors(request);
198 }
199
SetBucketStorageCapacity(const std::string & bucket,int64_t storageCapacity) const200 VoidOutcome OssClient::SetBucketStorageCapacity(const std::string &bucket, int64_t storageCapacity) const
201 {
202 return client_->SetBucketStorageCapacity(SetBucketStorageCapacityRequest(bucket, storageCapacity));
203 }
204
SetBucketStorageCapacity(const SetBucketStorageCapacityRequest & request) const205 VoidOutcome OssClient::SetBucketStorageCapacity(const SetBucketStorageCapacityRequest& request) const
206 {
207 return client_->SetBucketStorageCapacity(request);
208 }
209
SetBucketPolicy(const SetBucketPolicyRequest & request) const210 VoidOutcome OssClient::SetBucketPolicy(const SetBucketPolicyRequest& request) const
211 {
212 return client_->SetBucketPolicy(request);
213 }
SetBucketRequestPayment(const SetBucketRequestPaymentRequest & request) const214 VoidOutcome OssClient::SetBucketRequestPayment(const SetBucketRequestPaymentRequest& request) const
215 {
216 return client_->SetBucketRequestPayment(request);
217 }
218
SetBucketEncryption(const SetBucketEncryptionRequest & request) const219 VoidOutcome OssClient::SetBucketEncryption(const SetBucketEncryptionRequest& request) const
220 {
221 return client_->SetBucketEncryption(request);
222 }
223
SetBucketTagging(const SetBucketTaggingRequest & request) const224 VoidOutcome OssClient::SetBucketTagging(const SetBucketTaggingRequest& request) const
225 {
226 return client_->SetBucketTagging(request);
227 }
228
SetBucketQosInfo(const SetBucketQosInfoRequest & request) const229 VoidOutcome OssClient::SetBucketQosInfo(const SetBucketQosInfoRequest& request) const
230 {
231 return client_->SetBucketQosInfo(request);
232 }
233
DeleteBucketPolicy(const DeleteBucketPolicyRequest & request) const234 VoidOutcome OssClient::DeleteBucketPolicy(const DeleteBucketPolicyRequest& request) const
235 {
236 return client_->DeleteBucketPolicy(request);
237 }
238
SetBucketVersioning(const SetBucketVersioningRequest & request) const239 VoidOutcome OssClient::SetBucketVersioning(const SetBucketVersioningRequest& request) const
240 {
241 return client_->SetBucketVersioning(request);
242 }
243
SetBucketInventoryConfiguration(const SetBucketInventoryConfigurationRequest & request) const244 VoidOutcome OssClient::SetBucketInventoryConfiguration(const SetBucketInventoryConfigurationRequest& request) const
245 {
246 return client_->SetBucketInventoryConfiguration(request);
247 }
248
DeleteBucket(const std::string & bucket) const249 VoidOutcome OssClient::DeleteBucket(const std::string &bucket) const
250 {
251 return client_->DeleteBucket(DeleteBucketRequest(bucket));
252 }
253
DeleteBucket(const DeleteBucketRequest & request) const254 VoidOutcome OssClient::DeleteBucket(const DeleteBucketRequest &request) const
255 {
256 return client_->DeleteBucket(request);
257 }
258
DeleteBucketLogging(const std::string & bucket) const259 VoidOutcome OssClient::DeleteBucketLogging(const std::string &bucket) const
260 {
261 return client_->DeleteBucketLogging(DeleteBucketLoggingRequest(bucket));
262 }
263
DeleteBucketLogging(const DeleteBucketLoggingRequest & request) const264 VoidOutcome OssClient::DeleteBucketLogging(const DeleteBucketLoggingRequest& request) const
265 {
266 return client_->DeleteBucketLogging(request);
267 }
268
DeleteBucketWebsite(const std::string & bucket) const269 VoidOutcome OssClient::DeleteBucketWebsite(const std::string &bucket) const
270 {
271 return client_->DeleteBucketWebsite(DeleteBucketWebsiteRequest(bucket));
272 }
273
DeleteBucketWebsite(const DeleteBucketWebsiteRequest & request) const274 VoidOutcome OssClient::DeleteBucketWebsite(const DeleteBucketWebsiteRequest& request) const
275 {
276 return client_->DeleteBucketWebsite(request);
277 }
278
DeleteBucketLifecycle(const std::string & bucket) const279 VoidOutcome OssClient::DeleteBucketLifecycle(const std::string &bucket) const
280 {
281 return client_->DeleteBucketLifecycle(DeleteBucketLifecycleRequest(bucket));
282 }
283
DeleteBucketLifecycle(const DeleteBucketLifecycleRequest & request) const284 VoidOutcome OssClient::DeleteBucketLifecycle(const DeleteBucketLifecycleRequest& request) const
285 {
286 return client_->DeleteBucketLifecycle(request);
287 }
288
DeleteBucketCors(const std::string & bucket) const289 VoidOutcome OssClient::DeleteBucketCors(const std::string &bucket) const
290 {
291 return client_->DeleteBucketCors(DeleteBucketCorsRequest(bucket));
292 }
293
DeleteBucketCors(const DeleteBucketCorsRequest & request) const294 VoidOutcome OssClient::DeleteBucketCors(const DeleteBucketCorsRequest& request) const
295 {
296 return client_->DeleteBucketCors(request);
297 }
298
DeleteBucketEncryption(const DeleteBucketEncryptionRequest & request) const299 VoidOutcome OssClient::DeleteBucketEncryption(const DeleteBucketEncryptionRequest& request) const
300 {
301 return client_->DeleteBucketEncryption(request);
302 }
303
DeleteBucketTagging(const DeleteBucketTaggingRequest & request) const304 VoidOutcome OssClient::DeleteBucketTagging(const DeleteBucketTaggingRequest& request) const
305 {
306 return client_->DeleteBucketTagging(request);
307 }
308
DeleteBucketQosInfo(const DeleteBucketQosInfoRequest & request) const309 VoidOutcome OssClient::DeleteBucketQosInfo(const DeleteBucketQosInfoRequest& request) const
310 {
311 return client_->DeleteBucketQosInfo(request);
312 }
313
DeleteBucketInventoryConfiguration(const DeleteBucketInventoryConfigurationRequest & request) const314 VoidOutcome OssClient::DeleteBucketInventoryConfiguration(const DeleteBucketInventoryConfigurationRequest& request) const
315 {
316 return client_->DeleteBucketInventoryConfiguration(request);
317 }
318
GetBucketAcl(const std::string & bucket) const319 GetBucketAclOutcome OssClient::GetBucketAcl(const std::string &bucket) const
320 {
321 return client_->GetBucketAcl(GetBucketAclRequest(bucket));
322 }
323
GetBucketAcl(const GetBucketAclRequest & request) const324 GetBucketAclOutcome OssClient::GetBucketAcl(const GetBucketAclRequest &request) const
325 {
326 return client_->GetBucketAcl(request);
327 }
328
GetBucketLocation(const std::string & bucket) const329 GetBucketLocationOutcome OssClient::GetBucketLocation(const std::string &bucket) const
330 {
331 return client_->GetBucketLocation(GetBucketLocationRequest(bucket));
332 }
333
GetBucketLocation(const GetBucketLocationRequest & request) const334 GetBucketLocationOutcome OssClient::GetBucketLocation(const GetBucketLocationRequest &request) const
335 {
336 return client_->GetBucketLocation(request);
337 }
338
GetBucketInfo(const std::string & bucket) const339 GetBucketInfoOutcome OssClient::GetBucketInfo(const std::string &bucket) const
340 {
341 return client_->GetBucketInfo(GetBucketInfoRequest(bucket));
342 }
343
GetBucketInfo(const GetBucketInfoRequest & request) const344 GetBucketInfoOutcome OssClient::GetBucketInfo(const GetBucketInfoRequest &request) const
345 {
346 return client_->GetBucketInfo(request);
347 }
348
GetBucketLogging(const std::string & bucket) const349 GetBucketLoggingOutcome OssClient::GetBucketLogging(const std::string &bucket) const
350 {
351 return client_->GetBucketLogging(GetBucketLoggingRequest(bucket));
352 }
353
GetBucketLogging(const GetBucketLoggingRequest & request) const354 GetBucketLoggingOutcome OssClient::GetBucketLogging(const GetBucketLoggingRequest &request) const
355 {
356 return client_->GetBucketLogging(request);
357 }
358
GetBucketWebsite(const std::string & bucket) const359 GetBucketWebsiteOutcome OssClient::GetBucketWebsite(const std::string &bucket) const
360 {
361 return client_->GetBucketWebsite(GetBucketWebsiteRequest(bucket));
362 }
363
GetBucketWebsite(const GetBucketWebsiteRequest & request) const364 GetBucketWebsiteOutcome OssClient::GetBucketWebsite(const GetBucketWebsiteRequest &request) const
365 {
366 return client_->GetBucketWebsite(request);
367 }
368
GetBucketReferer(const std::string & bucket) const369 GetBucketRefererOutcome OssClient::GetBucketReferer(const std::string &bucket) const
370 {
371 return client_->GetBucketReferer(GetBucketRefererRequest(bucket));
372 }
373
GetBucketReferer(const GetBucketRefererRequest & request) const374 GetBucketRefererOutcome OssClient::GetBucketReferer(const GetBucketRefererRequest &request) const
375 {
376 return client_->GetBucketReferer(request);
377 }
378
GetBucketLifecycle(const std::string & bucket) const379 GetBucketLifecycleOutcome OssClient::GetBucketLifecycle(const std::string &bucket) const
380 {
381 return client_->GetBucketLifecycle(GetBucketLifecycleRequest(bucket));
382 }
383
GetBucketLifecycle(const GetBucketLifecycleRequest & request) const384 GetBucketLifecycleOutcome OssClient::GetBucketLifecycle(const GetBucketLifecycleRequest &request) const
385 {
386 return client_->GetBucketLifecycle(request);
387 }
388
GetBucketStat(const std::string & bucket) const389 GetBucketStatOutcome OssClient::GetBucketStat(const std::string &bucket) const
390 {
391 return client_->GetBucketStat(GetBucketStatRequest(bucket));
392 }
393
GetBucketStat(const GetBucketStatRequest & request) const394 GetBucketStatOutcome OssClient::GetBucketStat(const GetBucketStatRequest &request) const
395 {
396 return client_->GetBucketStat(request);
397 }
398
GetBucketCors(const std::string & bucket) const399 GetBucketCorsOutcome OssClient::GetBucketCors(const std::string &bucket) const
400 {
401 return client_->GetBucketCors(GetBucketCorsRequest(bucket));
402 }
403
GetBucketCors(const GetBucketCorsRequest & request) const404 GetBucketCorsOutcome OssClient::GetBucketCors(const GetBucketCorsRequest &request) const
405 {
406 return client_->GetBucketCors(request);
407 }
408
GetBucketStorageCapacity(const std::string & bucket) const409 GetBucketStorageCapacityOutcome OssClient::GetBucketStorageCapacity(const std::string &bucket) const
410 {
411 return client_->GetBucketStorageCapacity(GetBucketStorageCapacityRequest(bucket));
412 }
413
GetBucketStorageCapacity(const GetBucketStorageCapacityRequest & request) const414 GetBucketStorageCapacityOutcome OssClient::GetBucketStorageCapacity(const GetBucketStorageCapacityRequest& request) const
415 {
416 return client_->GetBucketStorageCapacity(request);
417 }
418
GetBucketPolicy(const GetBucketPolicyRequest & request) const419 GetBucketPolicyOutcome OssClient::GetBucketPolicy(const GetBucketPolicyRequest& request) const
420 {
421 return client_->GetBucketPolicy(request);
422 }
GetBucketRequestPayment(const GetBucketRequestPaymentRequest & request) const423 GetBucketPaymentOutcome OssClient::GetBucketRequestPayment(const GetBucketRequestPaymentRequest& request) const
424 {
425 return client_->GetBucketRequestPayment(request);
426 }
427
GetBucketEncryption(const GetBucketEncryptionRequest & request) const428 GetBucketEncryptionOutcome OssClient::GetBucketEncryption(const GetBucketEncryptionRequest& request) const
429 {
430 return client_->GetBucketEncryption(request);
431 }
432
GetBucketTagging(const GetBucketTaggingRequest & request) const433 GetBucketTaggingOutcome OssClient::GetBucketTagging(const GetBucketTaggingRequest& request) const
434 {
435 return client_->GetBucketTagging(request);
436 }
437
GetBucketQosInfo(const GetBucketQosInfoRequest & request) const438 GetBucketQosInfoOutcome OssClient::GetBucketQosInfo(const GetBucketQosInfoRequest& request) const
439 {
440 return client_->GetBucketQosInfo(request);
441 }
442
GetUserQosInfo(const GetUserQosInfoRequest & request) const443 GetUserQosInfoOutcome OssClient::GetUserQosInfo(const GetUserQosInfoRequest& request) const
444 {
445 return client_->GetUserQosInfo(request);
446 }
447
GetBucketVersioning(const GetBucketVersioningRequest & request) const448 GetBucketVersioningOutcome OssClient::GetBucketVersioning(const GetBucketVersioningRequest& request) const
449 {
450 return client_->GetBucketVersioning(request);
451 }
452
GetBucketInventoryConfiguration(const GetBucketInventoryConfigurationRequest & request) const453 GetBucketInventoryConfigurationOutcome OssClient::GetBucketInventoryConfiguration(const GetBucketInventoryConfigurationRequest& request) const
454 {
455 return client_->GetBucketInventoryConfiguration(request);
456 }
457
458 #endif
459
ListObjects(const std::string & bucket) const460 ListObjectOutcome OssClient::ListObjects(const std::string &bucket) const
461 {
462 return client_->ListObjects(ListObjectsRequest(bucket));
463 }
464
ListObjects(const std::string & bucket,const std::string & prefix) const465 ListObjectOutcome OssClient::ListObjects(const std::string &bucket, const std::string &prefix) const
466 {
467 ListObjectsRequest request(bucket);
468 request.setPrefix(prefix);
469 return client_->ListObjects(request);
470 }
471
ListObjects(const ListObjectsRequest & request) const472 ListObjectOutcome OssClient::ListObjects(const ListObjectsRequest &request) const
473 {
474 return client_->ListObjects(request);
475 }
476
ListObjectVersions(const std::string & bucket) const477 ListObjectVersionsOutcome OssClient::ListObjectVersions(const std::string &bucket) const
478 {
479 return client_->ListObjectVersions(ListObjectVersionsRequest(bucket));
480 }
481
ListObjectVersions(const std::string & bucket,const std::string & prefix) const482 ListObjectVersionsOutcome OssClient::ListObjectVersions(const std::string &bucket, const std::string &prefix) const
483 {
484 ListObjectVersionsRequest request(bucket);
485 request.setPrefix(prefix);
486 return client_->ListObjectVersions(request);
487 }
488
ListObjectVersions(const ListObjectVersionsRequest & request) const489 ListObjectVersionsOutcome OssClient::ListObjectVersions(const ListObjectVersionsRequest& request) const
490 {
491 return client_->ListObjectVersions(request);
492 }
493
GetObject(const std::string & bucket,const std::string & key) const494 GetObjectOutcome OssClient::GetObject(const std::string &bucket, const std::string &key) const
495 {
496 return client_->GetObject(GetObjectRequest(bucket, key));
497 }
498
GetObject(const std::string & bucket,const std::string & key,const std::shared_ptr<std::iostream> & content) const499 GetObjectOutcome OssClient::GetObject(const std::string &bucket, const std::string &key, const std::shared_ptr<std::iostream> &content) const
500 {
501 GetObjectRequest request(bucket, key);
502 request.setResponseStreamFactory([=]() { return content; });
503 return client_->GetObject(request);
504 }
505
GetObject(const std::string & bucket,const std::string & key,const std::string & fileToSave) const506 GetObjectOutcome OssClient::GetObject(const std::string &bucket, const std::string &key, const std::string &fileToSave) const
507 {
508 GetObjectRequest request(bucket, key);
509 request.setResponseStreamFactory([=]() {return std::make_shared<std::fstream>(fileToSave, std::ios_base::out | std::ios_base::trunc | std::ios::binary); });
510 return client_->GetObject(request);
511 }
512
GetObject(const GetObjectRequest & request) const513 GetObjectOutcome OssClient::GetObject(const GetObjectRequest &request) const
514 {
515 return client_->GetObject(request);
516 }
517
PutObject(const std::string & bucket,const std::string & key,const std::shared_ptr<std::iostream> & content) const518 PutObjectOutcome OssClient::PutObject(const std::string &bucket, const std::string &key, const std::shared_ptr<std::iostream> &content) const
519 {
520 return client_->PutObject(PutObjectRequest(bucket, key, content));
521 }
522
PutObject(const std::string & bucket,const std::string & key,const std::string & fileToUpload) const523 PutObjectOutcome OssClient::PutObject(const std::string &bucket, const std::string &key, const std::string &fileToUpload) const
524 {
525 std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>(fileToUpload, std::ios::in|std::ios::binary);
526 return client_->PutObject(PutObjectRequest(bucket, key, content));
527 }
528
PutObject(const std::string & bucket,const std::string & key,const std::shared_ptr<std::iostream> & content,const ObjectMetaData & meta) const529 PutObjectOutcome OssClient::PutObject(const std::string &bucket, const std::string &key, const std::shared_ptr<std::iostream> &content, const ObjectMetaData &meta) const
530 {
531 return client_->PutObject(PutObjectRequest(bucket, key, content, meta));
532 }
533
PutObject(const std::string & bucket,const std::string & key,const std::string & fileToUpload,const ObjectMetaData & meta) const534 PutObjectOutcome OssClient::PutObject(const std::string &bucket, const std::string &key, const std::string &fileToUpload, const ObjectMetaData &meta) const
535 {
536 std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>(fileToUpload, std::ios::in | std::ios::binary);
537 return client_->PutObject(PutObjectRequest(bucket, key, content, meta));
538 }
539
PutObject(const PutObjectRequest & request) const540 PutObjectOutcome OssClient::PutObject(const PutObjectRequest &request) const
541 {
542 return client_->PutObject(request);
543 }
544
DeleteObject(const std::string & bucket,const std::string & key) const545 DeleteObjectOutcome OssClient::DeleteObject(const std::string &bucket, const std::string &key) const
546 {
547 return client_->DeleteObject(DeleteObjectRequest(bucket, key));
548 }
549
DeleteObject(const DeleteObjectRequest & request) const550 DeleteObjectOutcome OssClient::DeleteObject(const DeleteObjectRequest &request) const
551 {
552 return client_->DeleteObject(request);
553 }
554
DeleteObjects(const std::string bucket,const DeletedKeyList & keyList) const555 DeleteObjecstOutcome OssClient::DeleteObjects(const std::string bucket, const DeletedKeyList &keyList) const
556 {
557 DeleteObjectsRequest request(bucket);
558 request.setKeyList(keyList);
559 return client_->DeleteObjects(request);
560 }
561
DeleteObjects(const DeleteObjectsRequest & request) const562 DeleteObjecstOutcome OssClient::DeleteObjects(const DeleteObjectsRequest &request) const
563 {
564 return client_->DeleteObjects(request);
565 }
566
DeleteObjectVersions(const std::string bucket,const ObjectIdentifierList & objectList) const567 DeleteObjecVersionstOutcome OssClient::DeleteObjectVersions(const std::string bucket, const ObjectIdentifierList &objectList) const
568 {
569 DeleteObjectVersionsRequest request(bucket);
570 request.setObjects(objectList);
571 return client_->DeleteObjectVersions(request);
572 }
573
DeleteObjectVersions(const DeleteObjectVersionsRequest & request) const574 DeleteObjecVersionstOutcome OssClient::DeleteObjectVersions(const DeleteObjectVersionsRequest &request) const
575 {
576 return client_->DeleteObjectVersions(request);
577 }
578
HeadObject(const std::string & bucket,const std::string & key) const579 ObjectMetaDataOutcome OssClient::HeadObject(const std::string &bucket, const std::string &key) const
580 {
581 return client_->HeadObject(HeadObjectRequest(bucket, key));
582 }
583
HeadObject(const HeadObjectRequest & request) const584 ObjectMetaDataOutcome OssClient::HeadObject(const HeadObjectRequest &request) const
585 {
586 return client_->HeadObject(request);
587 }
588
GetObjectMeta(const std::string & bucket,const std::string & key) const589 ObjectMetaDataOutcome OssClient::GetObjectMeta(const std::string &bucket, const std::string &key) const
590 {
591 return client_->GetObjectMeta(GetObjectMetaRequest(bucket, key));
592 }
593
GetObjectMeta(const GetObjectMetaRequest & request) const594 ObjectMetaDataOutcome OssClient::GetObjectMeta(const GetObjectMetaRequest &request) const
595 {
596 return client_->GetObjectMeta(request);
597 }
598
GetObjectAcl(const GetObjectAclRequest & request) const599 GetObjectAclOutcome OssClient::GetObjectAcl(const GetObjectAclRequest &request) const
600 {
601 return client_->GetObjectAcl(request);
602 }
603
AppendObject(const AppendObjectRequest & request) const604 AppendObjectOutcome OssClient::AppendObject(const AppendObjectRequest &request) const
605 {
606 return client_->AppendObject(request);
607 }
608
CopyObject(const CopyObjectRequest & request) const609 CopyObjectOutcome OssClient::CopyObject(const CopyObjectRequest &request) const
610 {
611 return client_->CopyObject(request);
612 }
613
GetSymlink(const GetSymlinkRequest & request) const614 GetSymlinkOutcome OssClient::GetSymlink(const GetSymlinkRequest &request) const
615 {
616 return client_->GetSymlink(request);
617 }
618
ProcessObject(const ProcessObjectRequest & request) const619 GetObjectOutcome OssClient::ProcessObject(const ProcessObjectRequest &request) const
620 {
621 return client_->ProcessObject(request);
622 }
623
RestoreObject(const std::string & bucket,const std::string & key) const624 RestoreObjectOutcome OssClient::RestoreObject(const std::string &bucket, const std::string &key) const
625 {
626 return client_->RestoreObject(RestoreObjectRequest(bucket, key));
627 }
628
RestoreObject(const RestoreObjectRequest & request) const629 RestoreObjectOutcome OssClient::RestoreObject(const RestoreObjectRequest &request) const
630 {
631 return client_->RestoreObject(request);
632 }
633
CreateSymlink(const CreateSymlinkRequest & request) const634 CreateSymlinkOutcome OssClient::CreateSymlink(const CreateSymlinkRequest &request) const
635 {
636 return client_->CreateSymlink(request);
637 }
638
SetObjectAcl(const SetObjectAclRequest & request) const639 SetObjectAclOutcome OssClient::SetObjectAcl(const SetObjectAclRequest &request) const
640 {
641 return client_->SetObjectAcl(request);
642 }
643
SelectObject(const SelectObjectRequest & request) const644 GetObjectOutcome OssClient::SelectObject(const SelectObjectRequest &request) const
645 {
646 return client_->SelectObject(request);
647 }
648
CreateSelectObjectMeta(const CreateSelectObjectMetaRequest & request) const649 CreateSelectObjectMetaOutcome OssClient::CreateSelectObjectMeta(const CreateSelectObjectMetaRequest &request) const
650 {
651 return client_->CreateSelectObjectMeta(request);
652 }
653
SetObjectTagging(const SetObjectTaggingRequest & request) const654 SetObjectTaggingOutcome OssClient::SetObjectTagging(const SetObjectTaggingRequest& request) const
655 {
656 return client_->SetObjectTagging(request);
657 }
658
DeleteObjectTagging(const DeleteObjectTaggingRequest & request) const659 DeleteObjectTaggingOutcome OssClient::DeleteObjectTagging(const DeleteObjectTaggingRequest& request) const
660 {
661 return client_->DeleteObjectTagging(request);
662 }
663
GetObjectTagging(const GetObjectTaggingRequest & request) const664 GetObjectTaggingOutcome OssClient::GetObjectTagging(const GetObjectTaggingRequest& request) const
665 {
666 return client_->GetObjectTagging(request);
667 }
668
GeneratePresignedUrl(const GeneratePresignedUrlRequest & request) const669 StringOutcome OssClient::GeneratePresignedUrl(const GeneratePresignedUrlRequest &request) const
670 {
671 return client_->GeneratePresignedUrl(request);
672 }
673
GeneratePresignedUrl(const std::string & bucket,const std::string & key) const674 StringOutcome OssClient::GeneratePresignedUrl(const std::string &bucket, const std::string &key) const
675 {
676 return GeneratePresignedUrl(GeneratePresignedUrlRequest(bucket, key));
677 }
678
GeneratePresignedUrl(const std::string & bucket,const std::string & key,int64_t expires) const679 StringOutcome OssClient::GeneratePresignedUrl(const std::string &bucket, const std::string &key, int64_t expires) const
680 {
681 GeneratePresignedUrlRequest request(bucket, key);
682 request.setExpires(expires);
683 return GeneratePresignedUrl(request);
684 }
685
GeneratePresignedUrl(const std::string & bucket,const std::string & key,int64_t expires,Http::Method method) const686 StringOutcome OssClient::GeneratePresignedUrl(const std::string &bucket, const std::string &key, int64_t expires, Http::Method method) const
687 {
688 GeneratePresignedUrlRequest request(bucket, key, method);
689 request.setExpires(expires);
690 return GeneratePresignedUrl(request);
691 }
692
GetObjectByUrl(const GetObjectByUrlRequest & request) const693 GetObjectOutcome OssClient::GetObjectByUrl(const GetObjectByUrlRequest &request) const
694 {
695 return client_->GetObjectByUrl(request);
696 }
697
GetObjectByUrl(const std::string & url) const698 GetObjectOutcome OssClient::GetObjectByUrl(const std::string &url) const
699 {
700 return client_->GetObjectByUrl(GetObjectByUrlRequest(url));
701 }
702
GetObjectByUrl(const std::string & url,const std::string & file) const703 GetObjectOutcome OssClient::GetObjectByUrl(const std::string &url, const std::string &file) const
704 {
705 GetObjectByUrlRequest request(url);
706 request.setResponseStreamFactory([=]() {return std::make_shared<std::fstream>(file, std::ios_base::out | std::ios_base::in | std::ios_base::trunc); });
707 return client_->GetObjectByUrl(request);
708 }
709
PutObjectByUrl(const PutObjectByUrlRequest & request) const710 PutObjectOutcome OssClient::PutObjectByUrl(const PutObjectByUrlRequest &request) const
711 {
712 return client_->PutObjectByUrl(request);
713 }
714
PutObjectByUrl(const std::string & url,const std::string & file) const715 PutObjectOutcome OssClient::PutObjectByUrl(const std::string &url, const std::string &file) const
716 {
717 std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>(file, std::ios::in|std::ios::binary);
718 return client_->PutObjectByUrl(PutObjectByUrlRequest(url, content));
719 }
720
PutObjectByUrl(const std::string & url,const std::string & file,const ObjectMetaData & metaData) const721 PutObjectOutcome OssClient::PutObjectByUrl(const std::string &url, const std::string &file, const ObjectMetaData &metaData) const
722 {
723 std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>(file, std::ios::in | std::ios::binary);
724 return client_->PutObjectByUrl(PutObjectByUrlRequest(url, content, metaData));
725 }
726
PutObjectByUrl(const std::string & url,const std::shared_ptr<std::iostream> & content) const727 PutObjectOutcome OssClient::PutObjectByUrl(const std::string &url, const std::shared_ptr<std::iostream> &content) const
728 {
729 return client_->PutObjectByUrl(PutObjectByUrlRequest(url, content));
730 }
731
PutObjectByUrl(const std::string & url,const std::shared_ptr<std::iostream> & content,const ObjectMetaData & metaData) const732 PutObjectOutcome OssClient::PutObjectByUrl(const std::string &url, const std::shared_ptr<std::iostream> &content, const ObjectMetaData &metaData) const
733 {
734 return client_->PutObjectByUrl(PutObjectByUrlRequest(url, content, metaData));
735 }
736
InitiateMultipartUpload(const InitiateMultipartUploadRequest & request) const737 InitiateMultipartUploadOutcome OssClient::InitiateMultipartUpload(const InitiateMultipartUploadRequest &request)const
738 {
739 return client_->InitiateMultipartUpload(request);
740 }
741
UploadPart(const UploadPartRequest & request) const742 PutObjectOutcome OssClient::UploadPart(const UploadPartRequest &request) const
743 {
744 return client_->UploadPart(request);
745 }
746
UploadPartCopy(const UploadPartCopyRequest & request) const747 UploadPartCopyOutcome OssClient::UploadPartCopy(const UploadPartCopyRequest &request) const
748 {
749 return client_->UploadPartCopy(request);
750 }
751
CompleteMultipartUpload(const CompleteMultipartUploadRequest & request) const752 CompleteMultipartUploadOutcome OssClient::CompleteMultipartUpload(const CompleteMultipartUploadRequest &request) const
753 {
754 return client_->CompleteMultipartUpload(request);
755 }
756
AbortMultipartUpload(const AbortMultipartUploadRequest & request) const757 VoidOutcome OssClient::AbortMultipartUpload(const AbortMultipartUploadRequest &request) const
758 {
759 return client_->AbortMultipartUpload(request);
760 }
761
ListMultipartUploads(const ListMultipartUploadsRequest & request) const762 ListMultipartUploadsOutcome OssClient::ListMultipartUploads(const ListMultipartUploadsRequest &request) const
763 {
764 return client_->ListMultipartUploads(request);
765 }
766
ListParts(const ListPartsRequest & request) const767 ListPartsOutcome OssClient::ListParts(const ListPartsRequest &request) const
768 {
769 return client_->ListParts(request);
770 }
771
772 /*Aysnc APIs*/
ListObjectsAsync(const ListObjectsRequest & request,const ListObjectAsyncHandler & handler,const std::shared_ptr<const AsyncCallerContext> & context) const773 void OssClient::ListObjectsAsync(const ListObjectsRequest &request, const ListObjectAsyncHandler &handler, const std::shared_ptr<const AsyncCallerContext>& context) const
774 {
775 auto fn = [this, request, handler, context]()
776 {
777 handler(this, request, client_->ListObjects(request), context);
778 };
779
780 client_->asyncExecute(new Runnable(fn));
781 }
782
GetObjectAsync(const GetObjectRequest & request,const GetObjectAsyncHandler & handler,const std::shared_ptr<const AsyncCallerContext> & context) const783 void OssClient::GetObjectAsync(const GetObjectRequest &request, const GetObjectAsyncHandler &handler, const std::shared_ptr<const AsyncCallerContext>& context) const
784 {
785 auto fn = [this, request, handler, context]()
786 {
787 handler(this, request, client_->GetObject(request), context);
788 };
789
790 client_->asyncExecute(new Runnable(fn));
791 }
792
PutObjectAsync(const PutObjectRequest & request,const PutObjectAsyncHandler & handler,const std::shared_ptr<const AsyncCallerContext> & context) const793 void OssClient::PutObjectAsync(const PutObjectRequest &request, const PutObjectAsyncHandler &handler, const std::shared_ptr<const AsyncCallerContext>& context) const
794 {
795 auto fn = [this, request, handler, context]()
796 {
797 handler(this, request, client_->PutObject(request), context);
798 };
799
800 client_->asyncExecute(new Runnable(fn));
801 }
802
UploadPartAsync(const UploadPartRequest & request,const UploadPartAsyncHandler & handler,const std::shared_ptr<const AsyncCallerContext> & context) const803 void OssClient::UploadPartAsync(const UploadPartRequest &request, const UploadPartAsyncHandler &handler, const std::shared_ptr<const AsyncCallerContext>& context) const
804 {
805 auto fn = [this, request, handler, context]()
806 {
807 handler(this, request, client_->UploadPart(request), context);
808 };
809
810 client_->asyncExecute(new Runnable(fn));
811 }
812
UploadPartCopyAsync(const UploadPartCopyRequest & request,const UploadPartCopyAsyncHandler & handler,const std::shared_ptr<const AsyncCallerContext> & context) const813 void OssClient::UploadPartCopyAsync(const UploadPartCopyRequest &request, const UploadPartCopyAsyncHandler &handler, const std::shared_ptr<const AsyncCallerContext>& context) const
814 {
815 auto fn = [this, request, handler, context]()
816 {
817 handler(this, request, client_->UploadPartCopy(request), context);
818 };
819
820 client_->asyncExecute(new Runnable(fn));
821 }
822
823
824 /*Callable APIs*/
ListObjectsCallable(const ListObjectsRequest & request) const825 ListObjectOutcomeCallable OssClient::ListObjectsCallable(const ListObjectsRequest &request) const
826 {
827 auto task = std::make_shared<std::packaged_task<ListObjectOutcome()>>(
828 [this, request]()
829 {
830 return this->ListObjects(request);
831 });
832 client_->asyncExecute(new Runnable([task]() { (*task)(); }));
833 return task->get_future();
834 }
835
GetObjectCallable(const GetObjectRequest & request) const836 GetObjectOutcomeCallable OssClient::GetObjectCallable(const GetObjectRequest &request) const
837 {
838 auto task = std::make_shared<std::packaged_task<GetObjectOutcome()>>(
839 [this, request]()
840 {
841 return this->GetObject(request);
842 });
843 client_->asyncExecute(new Runnable([task]() { (*task)(); }));
844 return task->get_future();
845
846 }
847
PutObjectCallable(const PutObjectRequest & request) const848 PutObjectOutcomeCallable OssClient::PutObjectCallable(const PutObjectRequest &request) const
849 {
850 auto task = std::make_shared<std::packaged_task<PutObjectOutcome()>>(
851 [this, request]()
852 {
853 return this->PutObject(request);
854 });
855 client_->asyncExecute(new Runnable([task]() { (*task)(); }));
856 return task->get_future();
857 }
858
UploadPartCallable(const UploadPartRequest & request) const859 PutObjectOutcomeCallable OssClient::UploadPartCallable(const UploadPartRequest &request) const
860 {
861 auto task = std::make_shared<std::packaged_task<PutObjectOutcome()>>(
862 [this, request]()
863 {
864 return this->UploadPart(request);
865 });
866 client_->asyncExecute(new Runnable([task]() { (*task)(); }));
867 return task->get_future();
868 }
869
UploadPartCopyCallable(const UploadPartCopyRequest & request) const870 UploadPartCopyOutcomeCallable OssClient::UploadPartCopyCallable(const UploadPartCopyRequest &request) const
871 {
872 auto task = std::make_shared<std::packaged_task<UploadPartCopyOutcome()>>(
873 [this, request]()
874 {
875 return this->UploadPartCopy(request);
876 });
877 client_->asyncExecute(new Runnable([task]() { (*task)(); }));
878 return task->get_future();
879 }
880
881 /*Extended APIs*/
882 #if !defined(OSS_DISABLE_BUCKET)
DoesBucketExist(const std::string & bucket) const883 bool OssClient::DoesBucketExist(const std::string &bucket) const
884 {
885 return client_->GetBucketAcl(GetBucketAclRequest(bucket)).isSuccess();
886 }
887 #endif
888
DoesObjectExist(const std::string & bucket,const std::string & key) const889 bool OssClient::DoesObjectExist(const std::string &bucket, const std::string &key) const
890 {
891 return client_->GetObjectMeta(GetObjectMetaRequest(bucket, key)).isSuccess();
892 }
893
ModifyObjectMeta(const std::string & bucket,const std::string & key,const ObjectMetaData & meta)894 CopyObjectOutcome OssClient::ModifyObjectMeta(const std::string& bucket, const std::string& key, const ObjectMetaData& meta)
895 {
896 CopyObjectRequest copyRequest(bucket, key, meta);
897 copyRequest.setCopySource(bucket, key);
898 copyRequest.setMetadataDirective(CopyActionList::Replace);
899 return client_->CopyObject(copyRequest);
900 }
901
902 #if !defined(OSS_DISABLE_LIVECHANNEL)
PutLiveChannelStatus(const PutLiveChannelStatusRequest & request) const903 VoidOutcome OssClient::PutLiveChannelStatus(const PutLiveChannelStatusRequest &request) const
904 {
905 return client_->PutLiveChannelStatus(request);
906 }
907
PutLiveChannel(const PutLiveChannelRequest & request) const908 PutLiveChannelOutcome OssClient::PutLiveChannel(const PutLiveChannelRequest &request) const
909 {
910 return client_->PutLiveChannel(request);
911 }
912
PostVodPlaylist(const PostVodPlaylistRequest & request) const913 VoidOutcome OssClient::PostVodPlaylist(const PostVodPlaylistRequest &request) const
914 {
915 return client_->PostVodPlaylist(request);
916 }
917
GetVodPlaylist(const GetVodPlaylistRequest & request) const918 GetVodPlaylistOutcome OssClient::GetVodPlaylist(const GetVodPlaylistRequest &request) const
919 {
920 return client_->GetVodPlaylist(request);
921 }
922
GetLiveChannelStat(const GetLiveChannelStatRequest & request) const923 GetLiveChannelStatOutcome OssClient::GetLiveChannelStat(const GetLiveChannelStatRequest &request) const
924 {
925 return client_->GetLiveChannelStat(request);
926 }
927
GetLiveChannelInfo(const GetLiveChannelInfoRequest & request) const928 GetLiveChannelInfoOutcome OssClient::GetLiveChannelInfo(const GetLiveChannelInfoRequest &request) const
929 {
930 return client_->GetLiveChannelInfo(request);
931 }
932
GetLiveChannelHistory(const GetLiveChannelHistoryRequest & request) const933 GetLiveChannelHistoryOutcome OssClient::GetLiveChannelHistory(const GetLiveChannelHistoryRequest &request) const
934 {
935 return client_->GetLiveChannelHistory(request);
936 }
937
ListLiveChannel(const ListLiveChannelRequest & request) const938 ListLiveChannelOutcome OssClient::ListLiveChannel(const ListLiveChannelRequest &request) const
939 {
940 return client_->ListLiveChannel(request);
941 }
942
DeleteLiveChannel(const DeleteLiveChannelRequest & request) const943 VoidOutcome OssClient::DeleteLiveChannel(const DeleteLiveChannelRequest &request) const
944 {
945 return client_->DeleteLiveChannel(request);
946 }
947
GenerateRTMPSignedUrl(const GenerateRTMPSignedUrlRequest & request) const948 StringOutcome OssClient::GenerateRTMPSignedUrl(const GenerateRTMPSignedUrlRequest &request) const
949 {
950 return client_->GenerateRTMPSignedUrl(request);
951 }
952 #endif
953
DisableRequest()954 void OssClient::DisableRequest()
955 {
956 client_->DisableRequest();
957 }
958
EnableRequest()959 void OssClient::EnableRequest()
960 {
961 client_->EnableRequest();
962 }
963
964 #if !defined(OSS_DISABLE_RESUAMABLE)
ResumableUploadObject(const UploadObjectRequest & request) const965 PutObjectOutcome OssClient::ResumableUploadObject(const UploadObjectRequest &request) const
966 {
967 return client_->ResumableUploadObject(request);
968 }
969
ResumableCopyObject(const MultiCopyObjectRequest & request) const970 CopyObjectOutcome OssClient::ResumableCopyObject(const MultiCopyObjectRequest &request) const
971 {
972 return client_->ResumableCopyObject(request);
973 }
974
ResumableDownloadObject(const DownloadObjectRequest & request) const975 GetObjectOutcome OssClient::ResumableDownloadObject(const DownloadObjectRequest &request) const
976 {
977 return client_->ResumableDownloadObject(request);
978 }
979 #endif