From 4da266b4b758c96b24e4132b48289a9e7a00d446 Mon Sep 17 00:00:00 2001 From: sbiscigl Date: Fri, 4 Apr 2025 16:05:01 -0400 Subject: [PATCH] add if match statement to download --- .../include/aws/transfer/TransferHandle.h | 7 +++++++ .../source/transfer/TransferManager.cpp | 2 ++ 2 files changed, 9 insertions(+) diff --git a/src/aws-cpp-sdk-transfer/include/aws/transfer/TransferHandle.h b/src/aws-cpp-sdk-transfer/include/aws/transfer/TransferHandle.h index d550b44bbcca..0d062be1e00e 100644 --- a/src/aws-cpp-sdk-transfer/include/aws/transfer/TransferHandle.h +++ b/src/aws-cpp-sdk-transfer/include/aws/transfer/TransferHandle.h @@ -297,6 +297,12 @@ namespace Aws const Aws::String GetVersionId() const { std::lock_guard locker(m_getterSetterLock); return m_versionId; } void SetVersionId(const Aws::String& versionId) { std::lock_guard locker(m_getterSetterLock); m_versionId = versionId; } + /** + * (Download only) ETAG of the object to retrieve. + */ + const Aws::String GetEtag() const { std::lock_guard locker(m_getterSetterLock); return m_etag; } + void SetEtag(const Aws::String& etag) { std::lock_guard locker(m_getterSetterLock); m_etag = etag; } + /** * Upload or Download? */ @@ -405,6 +411,7 @@ namespace Aws Aws::String m_fileName; Aws::String m_contentType; Aws::String m_versionId; + Aws::String m_etag; Aws::Map m_metadata; TransferStatus m_status; Aws::Client::AWSError m_lastError; diff --git a/src/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp b/src/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp index 507f7ce25ab4..cfec7ba61cca 100644 --- a/src/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp +++ b/src/aws-cpp-sdk-transfer/source/transfer/TransferManager.cpp @@ -931,6 +931,7 @@ namespace Aws handle->SetBytesTotalSize(downloadSize); handle->SetContentType(headObjectOutcome.GetResult().GetContentType()); handle->SetMetadata(headObjectOutcome.GetResult().GetMetadata()); + handle->SetEtag(headObjectOutcome.GetResult().GetETag()); /* When bucket versioning is suspended, head object will return "null" for unversioned object. * Send following GetObject with "null" as versionId will result in 403 access denied error if your IAM role or policy * doesn't have GetObjectVersion permission. @@ -1012,6 +1013,7 @@ namespace Aws getObjectRangeRequest.WithKey(handle->GetKey()); getObjectRangeRequest.SetRange(FormatRangeSpecifier(rangeStart, rangeEnd)); getObjectRangeRequest.SetResponseStreamFactory(responseStreamFunction); + getObjectRangeRequest.SetIfMatch(handle->GetEtag()); if(handle->GetVersionId().size() > 0) { getObjectRangeRequest.SetVersionId(handle->GetVersionId());