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