azure-storage-blobs
blob_client.hpp
1 // Copyright (c) Microsoft Corporation. All rights reserved.
2 // SPDX-License-Identifier: MIT
3 
4 #pragma once
5 
6 #include <cstdint>
7 #include <map>
8 #include <memory>
9 #include <string>
10 
11 #include <azure/core/credentials/credentials.hpp>
12 #include <azure/storage/common/storage_credential.hpp>
13 
14 #include "azure/storage/blobs/blob_options.hpp"
15 #include "azure/storage/blobs/blob_responses.hpp"
16 #include "azure/storage/blobs/protocol/blob_rest_client.hpp"
17 
18 namespace Azure { namespace Storage { namespace Files { namespace DataLake {
19  class DataLakeFileSystemClient;
20  class DataLakeDirectoryClient;
21  class DataLakeFileClient;
22 }}}} // namespace Azure::Storage::Files::DataLake
23 
24 namespace Azure { namespace Storage { namespace Blobs {
25 
26  class BlockBlobClient;
27  class AppendBlobClient;
28  class PageBlobClient;
29  class BlobLeaseClient;
30 
34  class BlobClient {
35  public:
40  virtual ~BlobClient() = default;
41 
54  const std::string& connectionString,
55  const std::string& blobContainerName,
56  const std::string& blobName,
57  const BlobClientOptions& options = BlobClientOptions());
58 
68  explicit BlobClient(
69  const std::string& blobUrl,
70  std::shared_ptr<StorageSharedKeyCredential> credential,
71  const BlobClientOptions& options = BlobClientOptions());
72 
82  explicit BlobClient(
83  const std::string& blobUrl,
84  std::shared_ptr<Core::Credentials::TokenCredential> credential,
85  const BlobClientOptions& options = BlobClientOptions());
86 
96  explicit BlobClient(
97  const std::string& blobUrl,
98  const BlobClientOptions& options = BlobClientOptions());
99 
108 
116 
124 
130  std::string GetUrl() const { return m_blobUrl.GetAbsoluteUrl(); }
131 
140  BlobClient WithSnapshot(const std::string& snapshot) const;
141 
150  BlobClient WithVersionId(const std::string& versionId) const;
151 
160  Azure::Response<Models::BlobProperties> GetProperties(
162  const Azure::Core::Context& context = Azure::Core::Context()) const;
163 
172  Azure::Response<Models::SetBlobHttpHeadersResult> SetHttpHeaders(
173  Models::BlobHttpHeaders httpHeaders,
175  const Azure::Core::Context& context = Azure::Core::Context()) const;
176 
186  Azure::Response<Models::SetBlobMetadataResult> SetMetadata(
187  Metadata metadata,
189  const Azure::Core::Context& context = Azure::Core::Context()) const;
190 
200  Azure::Response<Models::SetBlobAccessTierResult> SetAccessTier(
201  Models::AccessTier accessTier,
203  const Azure::Core::Context& context = Azure::Core::Context()) const;
204 
219  const std::string& sourceUri,
221  const Azure::Core::Context& context = Azure::Core::Context()) const;
222 
232  Azure::Response<Models::AbortBlobCopyFromUriResult> AbortCopyFromUri(
233  const std::string& copyId,
235  const Azure::Core::Context& context = Azure::Core::Context()) const;
236 
246  Azure::Response<Models::DownloadBlobResult> Download(
247  const DownloadBlobOptions& options = DownloadBlobOptions(),
248  const Azure::Core::Context& context = Azure::Core::Context()) const;
249 
261  Azure::Response<Models::DownloadBlobToResult> DownloadTo(
262  uint8_t* buffer,
263  size_t bufferSize,
264  const DownloadBlobToOptions& options = DownloadBlobToOptions(),
265  const Azure::Core::Context& context = Azure::Core::Context()) const;
266 
276  Azure::Response<Models::DownloadBlobToResult> DownloadTo(
277  const std::string& fileName,
278  const DownloadBlobToOptions& options = DownloadBlobToOptions(),
279  const Azure::Core::Context& context = Azure::Core::Context()) const;
280 
288  Azure::Response<Models::CreateBlobSnapshotResult> CreateSnapshot(
290  const Azure::Core::Context& context = Azure::Core::Context()) const;
291 
301  Azure::Response<Models::DeleteBlobResult> Delete(
302  const DeleteBlobOptions& options = DeleteBlobOptions(),
303  const Azure::Core::Context& context = Azure::Core::Context()) const;
304 
313  Azure::Response<Models::DeleteBlobResult> DeleteIfExists(
314  const DeleteBlobOptions& options = DeleteBlobOptions(),
315  const Azure::Core::Context& context = Azure::Core::Context()) const;
316 
325  Azure::Response<Models::UndeleteBlobResult> Undelete(
326  const UndeleteBlobOptions& options = UndeleteBlobOptions(),
327  const Azure::Core::Context& context = Azure::Core::Context()) const;
328 
337  Azure::Response<Models::SetBlobTagsResult> SetTags(
338  std::map<std::string, std::string> tags,
339  const SetBlobTagsOptions& options = SetBlobTagsOptions(),
340  const Azure::Core::Context& context = Azure::Core::Context()) const;
341 
349  Azure::Response<std::map<std::string, std::string>> GetTags(
350  const GetBlobTagsOptions& options = GetBlobTagsOptions(),
351  const Azure::Core::Context& context = Azure::Core::Context()) const;
352 
353  protected:
354  Azure::Core::Url m_blobUrl;
355  std::shared_ptr<Azure::Core::Http::_internal::HttpPipeline> m_pipeline;
356  Azure::Nullable<EncryptionKey> m_customerProvidedKey;
357  Azure::Nullable<std::string> m_encryptionScope;
358 
359  private:
360  explicit BlobClient(
361  Azure::Core::Url blobUrl,
362  std::shared_ptr<Azure::Core::Http::_internal::HttpPipeline> pipeline,
363  Azure::Nullable<EncryptionKey> customerProvidedKey = Azure::Nullable<EncryptionKey>(),
364  Azure::Nullable<std::string> encryptionScope = Azure::Nullable<std::string>())
365  : m_blobUrl(std::move(blobUrl)), m_pipeline(std::move(pipeline)),
366  m_customerProvidedKey(std::move(customerProvidedKey)),
367  m_encryptionScope(std::move(encryptionScope))
368  {
369  }
370 
371  friend class BlobContainerClient;
372  friend class Files::DataLake::DataLakeFileSystemClient;
373  friend class Files::DataLake::DataLakeDirectoryClient;
374  friend class Files::DataLake::DataLakeFileClient;
375  friend class BlobLeaseClient;
376  };
377 }}} // namespace Azure::Storage::Blobs
Azure::Storage::Blobs::BlobClient::AbortCopyFromUri
Azure::Response< Models::AbortBlobCopyFromUriResult > AbortCopyFromUri(const std::string &copyId, const AbortBlobCopyFromUriOptions &options=AbortBlobCopyFromUriOptions(), const Azure::Core::Context &context=Azure::Core::Context()) const
Aborts a pending StartCopyFromUri operation, and leaves this blob with zero length and full metadata.
Definition: blob_client.cpp:564
Azure::Storage::Blobs::DownloadBlobOptions
Optional parameters for Azure::Storage::Blobs::BlobClient::Download.
Definition: blob_options.hpp:497
Azure::Storage::Blobs::BlobClient::SetMetadata
Azure::Response< Models::SetBlobMetadataResult > SetMetadata(Metadata metadata, const SetBlobMetadataOptions &options=SetBlobMetadataOptions(), const Azure::Core::Context &context=Azure::Core::Context()) const
Sets user-defined metadata for the specified blob as one or more name-value pairs.
Definition: blob_client.cpp:496
Azure::Storage::Blobs::BlobClient::WithVersionId
BlobClient WithVersionId(const std::string &versionId) const
Creates a clone of this instance that references a version ID rather than the base blob.
Definition: blob_client.cpp:141
Azure::Storage::Blobs::BlobClient
The BlobClient allows you to manipulate Azure Storage blobs.
Definition: blob_client.hpp:34
Azure::Storage::Blobs::BlobClient::Delete
Azure::Response< Models::DeleteBlobResult > Delete(const DeleteBlobOptions &options=DeleteBlobOptions(), const Azure::Core::Context &context=Azure::Core::Context()) const
Marks the specified blob or snapshot for deletion. The blob is later deleted during garbage collectio...
Definition: blob_client.cpp:599
Azure::Storage::Blobs::BlobClient::AsAppendBlobClient
AppendBlobClient AsAppendBlobClient() const
Creates a new AppendBlobClient object with the same URL as this BlobClient. The new AppendBlobClient ...
Definition: blob_client.cpp:122
Azure::Storage::Blobs::BlobClient::SetHttpHeaders
Azure::Response< Models::SetBlobHttpHeadersResult > SetHttpHeaders(Models::BlobHttpHeaders httpHeaders, const SetBlobHttpHeadersOptions &options=SetBlobHttpHeadersOptions(), const Azure::Core::Context &context=Azure::Core::Context()) const
Sets system properties on the blob.
Definition: blob_client.cpp:479
Azure::Storage::Blobs::SetBlobHttpHeadersOptions
Optional parameters for Azure::Storage::Blobs::BlobClient::SetHttpHeaders.
Definition: blob_options.hpp:409
Azure::Storage::Blobs::BlobClient::DownloadTo
Azure::Response< Models::DownloadBlobToResult > DownloadTo(uint8_t *buffer, size_t bufferSize, const DownloadBlobToOptions &options=DownloadBlobToOptions(), const Azure::Core::Context &context=Azure::Core::Context()) const
Downloads a blob or a blob range from the service to a memory buffer using parallel requests.
Definition: blob_client.cpp:216
Azure::Storage::Blobs::BlobClient::Download
Azure::Response< Models::DownloadBlobResult > Download(const DownloadBlobOptions &options=DownloadBlobOptions(), const Azure::Core::Context &context=Azure::Core::Context()) const
Downloads a blob or a blob range from the service, including its metadata and properties.
Definition: blob_client.cpp:156
Azure::Storage::Blobs::BlobClient::Undelete
Azure::Response< Models::UndeleteBlobResult > Undelete(const UndeleteBlobOptions &options=UndeleteBlobOptions(), const Azure::Core::Context &context=Azure::Core::Context()) const
Restores the contents and metadata of a soft deleted blob and any associated soft deleted snapshots.
Definition: blob_client.cpp:636
Azure::Storage::Blobs::PageBlobClient
Definition: page_blob_client.hpp:23
Azure::Storage::Blobs::BlobClientOptions
Client options used to initialize all kinds of blob clients.
Definition: blob_options.hpp:135
Azure::Storage::Blobs::BlobClient::~BlobClient
virtual ~BlobClient()=default
Destructor.
Azure::Storage::Blobs::SetBlobMetadataOptions
Optional parameters for Azure::Storage::Blobs::BlobClient::SetMetadata.
Definition: blob_options.hpp:420
Azure::Storage::Blobs::BlobClient::CreateFromConnectionString
static BlobClient CreateFromConnectionString(const std::string &connectionString, const std::string &blobContainerName, const std::string &blobName, const BlobClientOptions &options=BlobClientOptions())
Initialize a new instance of BlobClient.
Definition: blob_client.cpp:27
Azure::Storage::Blobs::BlobClient::StartCopyFromUri
StartBlobCopyOperation StartCopyFromUri(const std::string &sourceUri, const StartBlobCopyFromUriOptions &options=StartBlobCopyFromUriOptions(), const Azure::Core::Context &context=Azure::Core::Context()) const
Copies data at from the source to this blob.
Definition: blob_client.cpp:532
Azure::Storage::Blobs::StartBlobCopyFromUriOptions
Optional parameters for Azure::Storage::Blobs::BlobClient::StartCopyFromUri.
Definition: blob_options.hpp:444
Azure::Storage::Blobs::SetBlobTagsOptions
Optional parameters for Azure::Storage::Blobs::BlobClient::SetTags.
Definition: blob_options.hpp:661
Azure::Storage::Blobs::Models::AccessTier
Extensible enum used to identify access tier of a blob.
Definition: blob_rest_client.hpp:581
Azure::Storage::Blobs::StartBlobCopyOperation
A long-running operation to copy a blob.
Definition: blob_responses.hpp:171
Azure::Storage::Blobs::BlobClient::SetAccessTier
Azure::Response< Models::SetBlobAccessTierResult > SetAccessTier(Models::AccessTier accessTier, const SetBlobAccessTierOptions &options=SetBlobAccessTierOptions(), const Azure::Core::Context &context=Azure::Core::Context()) const
Sets the tier on a blob. The operation is allowed on a page blob in a premium storage account and on ...
Definition: blob_client.cpp:520
Azure::Storage::Blobs::BlobClient::AsBlockBlobClient
BlockBlobClient AsBlockBlobClient() const
Creates a new BlockBlobClient object with the same URL as this BlobClient. The new BlockBlobClient us...
Definition: blob_client.cpp:120
Azure::Storage::Blobs::DeleteBlobOptions
Optional parameters for Azure::Storage::Blobs::BlobClient::Delete.
Definition: blob_options.hpp:572
Azure::Storage::Blobs::BlobClient::SetTags
Azure::Response< Models::SetBlobTagsResult > SetTags(std::map< std::string, std::string > tags, const SetBlobTagsOptions &options=SetBlobTagsOptions(), const Azure::Core::Context &context=Azure::Core::Context()) const
Sets tags on the underlying blob.
Definition: blob_client.cpp:646
Azure::Storage::Blobs::CreateBlobSnapshotOptions
Optional parameters for Azure::Storage::Blobs::BlobClient::CreateSnapshot.
Definition: blob_options.hpp:553
Azure::Storage::Blobs::BlobClient::CreateSnapshot
Azure::Response< Models::CreateBlobSnapshotResult > CreateSnapshot(const CreateBlobSnapshotOptions &options=CreateBlobSnapshotOptions(), const Azure::Core::Context &context=Azure::Core::Context()) const
Creates a read-only snapshot of a blob.
Definition: blob_client.cpp:576
Azure::Storage::Blobs::BlobClient::GetTags
Azure::Response< std::map< std::string, std::string > > GetTags(const GetBlobTagsOptions &options=GetBlobTagsOptions(), const Azure::Core::Context &context=Azure::Core::Context()) const
Gets the tags associated with the underlying blob.
Definition: blob_client.cpp:658
Azure::Storage::Blobs::BlockBlobClient
The BlockBlobClient allows you to manipulate Azure Storage block blobs.
Definition: block_blob_client.hpp:31
Azure::Storage::Blobs::AppendBlobClient
The AppendBlobClient allows you to manipulate Azure Storage append blobs.
Definition: append_blob_client.hpp:21
Azure::Storage::Blobs::AbortBlobCopyFromUriOptions
Optional parameters for Azure::Storage::Blobs::BlobClient::AbortCopyFromUri.
Definition: blob_options.hpp:486
Azure::Storage::Blobs::BlobClient::GetUrl
std::string GetUrl() const
Gets the blob's primary URL endpoint.
Definition: blob_client.hpp:130
Azure::Storage::Blobs::DownloadBlobToOptions
Optional parameters for Azure::Storage::Blobs::BlobClient::DownloadTo.
Definition: blob_options.hpp:519
Azure::Storage::Blobs::BlobClient::GetProperties
Azure::Response< Models::BlobProperties > GetProperties(const GetBlobPropertiesOptions &options=GetBlobPropertiesOptions(), const Azure::Core::Context &context=Azure::Core::Context()) const
Returns all user-defined metadata, standard HTTP properties, and system properties for the blob....
Definition: blob_client.cpp:440
Azure::Storage::Blobs::GetBlobTagsOptions
Optional parameters for Azure::Storage::Blobs::BlobClient::GetTags.
Definition: blob_options.hpp:672
Azure::Storage::Blobs::GetBlobPropertiesOptions
Optional parameters for Azure::Storage::Blobs::BlobClient::GetProperties.
Definition: blob_options.hpp:398
Azure::Storage::Blobs::BlobClient::DeleteIfExists
Azure::Response< Models::DeleteBlobResult > DeleteIfExists(const DeleteBlobOptions &options=DeleteBlobOptions(), const Azure::Core::Context &context=Azure::Core::Context()) const
Marks the specified blob or snapshot for deletion if it exists.
Definition: blob_client.cpp:615
Azure::Storage::Blobs::BlobClient::WithSnapshot
BlobClient WithSnapshot(const std::string &snapshot) const
Initializes a new instance of the BlobClient class with an identical URL source but the specified sna...
Definition: blob_client.cpp:126
Azure::Storage::Blobs::UndeleteBlobOptions
Optional parameters for Azure::Storage::Blobs::BlobClient::Undelete.
Definition: blob_options.hpp:590
Azure::Storage::Blobs::Models::BlobHttpHeaders
Standard HTTP properties supported by containers and blobs.
Definition: blob_rest_client.hpp:714
Azure::Storage::Blobs::BlobClient::AsPageBlobClient
PageBlobClient AsPageBlobClient() const
Creates a new PageBlobClient object with the same URL as this BlobClient. The new PageBlobClient uses...
Definition: blob_client.cpp:124
Azure::Storage::Blobs::BlobClient::BlobClient
BlobClient(const std::string &blobUrl, std::shared_ptr< StorageSharedKeyCredential > credential, const BlobClientOptions &options=BlobClientOptions())
Initialize a new instance of BlobClient.
Definition: blob_client.cpp:48
Azure::Storage::Blobs::SetBlobAccessTierOptions
Optional parameters for Azure::Storage::Blobs::BlobClient::SetAccessTier.
Definition: blob_options.hpp:431