From f764363a8f2bcea2291c4c175be0dd26505fa349 Mon Sep 17 00:00:00 2001 From: qicosmos Date: Thu, 9 Nov 2023 15:59:26 +0800 Subject: [PATCH] add coro interface: GetObjectCoro --- sdk/include/alibabacloud/oss/OssClient.h | 1 + sdk/src/OssClient.cc | 5 +++++ sdk/src/OssClientImpl.cc | 11 +++++++++++ sdk/src/OssClientImpl.h | 1 + sdk/src/http/CoroHttpClient.hpp | 4 ++-- .../CoroMultipartUploadPartTest.cc | 16 +++++++++++++++- 6 files changed, 35 insertions(+), 3 deletions(-) diff --git a/sdk/include/alibabacloud/oss/OssClient.h b/sdk/include/alibabacloud/oss/OssClient.h index 770cc8f..16bdce3 100644 --- a/sdk/include/alibabacloud/oss/OssClient.h +++ b/sdk/include/alibabacloud/oss/OssClient.h @@ -274,6 +274,7 @@ namespace OSS #ifdef USE_CORO /*Coro APIs*/ async_simple::coro::Lazy UploadPartCoro(const UploadPartRequest& request) const; + async_simple::coro::Lazy GetObjectCoro(const GetObjectRequest& request) const; #endif /*Extended APIs*/ #if !defined(OSS_DISABLE_BUCKET) diff --git a/sdk/src/OssClient.cc b/sdk/src/OssClient.cc index 1155cab..b393747 100644 --- a/sdk/src/OssClient.cc +++ b/sdk/src/OssClient.cc @@ -913,6 +913,11 @@ async_simple::coro::Lazy OssClient::UploadPartCoro(const Uploa { co_return co_await client_->UploadPartCoro(request); } + +async_simple::coro::Lazy OssClient::GetObjectCoro(const GetObjectRequest &request) const +{ + co_return co_await client_->GetObjectCoro(request); +} #endif /*Extended APIs*/ diff --git a/sdk/src/OssClientImpl.cc b/sdk/src/OssClientImpl.cc index 5dd404d..fa0edb6 100644 --- a/sdk/src/OssClientImpl.cc +++ b/sdk/src/OssClientImpl.cc @@ -1418,6 +1418,17 @@ async_simple::coro::Lazy OssClientImpl::UploadPartCoro(const U co_return PutObjectOutcome(outcome.error()); } } + +async_simple::coro::Lazy OssClientImpl::GetObjectCoro(const GetObjectRequest &request) const { + auto outcome = co_await MakeRequestCoro(request, Http::Method::Get); + if (outcome.isSuccess()) { + co_return GetObjectOutcome(GetObjectResult(request.Bucket(), request.Key(), + outcome.result().payload(),outcome.result().headerCollection())); + } + else { + co_return GetObjectOutcome(outcome.error()); + } +} #endif UploadPartCopyOutcome OssClientImpl::UploadPartCopy(const UploadPartCopyRequest &request) const diff --git a/sdk/src/OssClientImpl.h b/sdk/src/OssClientImpl.h index 4ae7e7d..8611a45 100644 --- a/sdk/src/OssClientImpl.h +++ b/sdk/src/OssClientImpl.h @@ -137,6 +137,7 @@ namespace OSS ListPartsOutcome ListParts(const ListPartsRequest &request) const; #ifdef USE_CORO async_simple::coro::Lazy UploadPartCoro(const UploadPartRequest& request) const; + async_simple::coro::Lazy GetObjectCoro(const GetObjectRequest &request) const; #endif /*Generate URL*/ diff --git a/sdk/src/http/CoroHttpClient.hpp b/sdk/src/http/CoroHttpClient.hpp index 340a858..420782e 100644 --- a/sdk/src/http/CoroHttpClient.hpp +++ b/sdk/src/http/CoroHttpClient.hpp @@ -21,7 +21,7 @@ #include "../utils/LogUtils.h" namespace AlibabaCloud::OSS { -inline const char* CORO_TAG = "CurlHttpClient"; +inline const char* CORO_TAG = "CoroHttpClient"; class CoroHttpClient : public HttpClient { public: @@ -53,7 +53,7 @@ class CoroHttpClient : public HttpClient { bool has_content = (body != nullptr); std::string content; - if (has_content) { + if (has_content && method != Http::Method::Put) { body->seekg(0, std::ios::end); int size = body->tellg(); content.resize(size); diff --git a/test/src/CoroMultipartUpload/CoroMultipartUploadPartTest.cc b/test/src/CoroMultipartUpload/CoroMultipartUploadPartTest.cc index 75428df..57bfcec 100644 --- a/test/src/CoroMultipartUpload/CoroMultipartUploadPartTest.cc +++ b/test/src/CoroMultipartUpload/CoroMultipartUploadPartTest.cc @@ -45,7 +45,7 @@ class CoroTest : public ::testing::Test { BucketName = "cpp-sdk-coro"; auto outcome = Client->CreateBucket(CreateBucketRequest(BucketName)); if(outcome.isSuccess()){ - std::cout << "Create Bucket "<PutObject(BucketName, key, content); + EXPECT_EQ(pOutcome.isSuccess(), true); + + GetObjectRequest request(BucketName, key); + request.setRange(10, 19); + auto outome = async_simple::coro::syncAwait(Client->GetObjectCoro(request)); + EXPECT_EQ(outome.isSuccess(), true); + EXPECT_EQ(outome.result().Content()->tellp(), 10); + } + auto memKey = TestUtils::GetObjectKey("MultipartUploadCoro-MemObject"); auto memContent = TestUtils::GetRandomStream(102400); auto memInitOutcome = Client->InitiateMultipartUpload(InitiateMultipartUploadRequest(BucketName, memKey));