通过


用于C++的 Azure 存储 Blob 客户端库

Azure Blob 存储是 Microsoft 提供的适用于云的对象存储解决方案。 Blob 存储最适合存储巨量的非结构化数据。 非结构化数据是不符合特定数据模型或定义的数据,例如文本或二进制数据。

入门指南

安装软件包

获取C++ SDK 的最简单方法是利用 vcpkg 包管理器。 请参阅相应的 Azure SDK for C++ 自述文件部分

若要通过 vcpkg 安装 Azure 存储包,请执行以下作:

vcpkg install azure-storage-blobs-cpp

然后,在 CMake 文件中使用:

find_package(azure-storage-blobs-cpp CONFIG REQUIRED)
target_link_libraries(<your project name> PRIVATE Azure::azure-storage-blobs)

先决条件

需要一个 Azure 订阅和 一个存储帐户 才能使用此包。

若要创建新的存储帐户,可以使用 Azure 门户Azure PowerShellAzure CLI

从源生成

首先,将存储库下载到本地文件夹:

git clone https://github.com/Azure/azure-sdk-for-cpp.git

在本地克隆存储库的根目录下创建新文件夹,切换到此文件夹并运行以下命令:

窗户:

cmake .. -A x64
cmake --build . --target azure-storage-blobs

或 Unix:

cmake .. -DCMAKE_BUILD_TYPE=Debug
cmake --build . --target azure-storage-blobs

重要概念

Blob 存储用于:

  • 直接向浏览器提供图像或文档。
  • 存储文件以供分布式访问。
  • 视频和音频流媒体。
  • 写入日志文件。
  • 存储用于备份和还原、灾难恢复及存档的数据。
  • 存储数据以供本地或 Azure 托管服务执行分析。

Blob 存储提供三种类型的资源:

  • 通过 使用的存储帐户
  • 通过 使用的存储帐户中的容器
  • 通过 使用的容器中的 blob

示例中详细了解身份验证选项(包括连接字符串、共享密钥、共享密钥签名、Active Directory 和匿名公共访问)。

线程安全性

我们保证所有客户端实例方法都是线程安全的,彼此独立(准则)。 这可确保重用客户端实例的建议始终是安全的,即使在线程之间也是如此。

其他概念

客户端选项 | 访问响应 | 长时间运行的作 |处理失败

例子

上传 Blob

const std::string connectionString = "<connection_string>";
const std::string containerName = "sample-container";
const std::string blobName = "sample-blob";

auto containerClient = BlobContainerClient::CreateFromConnectionString(connectionString, containerName);
containerClient.CreateIfNotExists();

BlockBlobClient blobClient = containerClient.GetBlockBlobClient(blobName);
// upload from local file
blobClient.UploadFrom(localFilePath);
// or upload from memory buffer
blobClinet.UploadFrom(bufferPtr, bufferLength);

下载 Blob

// download to local file
blobClient.DownloadTo(localFilePath);
// or download to memory buffer
blobClinet.DownloadTo(bufferPtr, bufferLength);

枚举 Blob

for (auto blobPage = containerClient.ListBlobs(); blobPage.HasPage(); blobPage.MoveToNextPage()) {
  for (auto& blob : blobPage.Blobs) {
    // Below is what you want to do with each blob
    std::cout << "blob: " << blob.Name << std::endl;
  }
}

Troubleshooting

所有 Blob 服务作都会在失败时引发 StorageException ,并显示有用的 ErrorCodes。 其中许多错误是可恢复的。

try
{
  containerClient.Delete();
}
catch (Azure::Storage::StorageException& e)
{
  if (e.ErrorCode == "ContainerNotFound")
  {
    // ignore the error if the container does not exist.
  }
  else
  {
    // handle other errors here
  }
}

后续步骤

Blob 示例入门:

  1. 上传和下载 Blob
  2. 列举操作

Contributing

有关生成、测试和参与这些库的详细信息,请参阅 存储 CONTRIBUTING.md

此项目欢迎贡献和建议。 大多数贡献要求你同意参与者许可协议(CLA),声明你有权(实际这样做)授予我们使用你的贡献的权利。 有关详细信息,请访问 cla.microsoft.com

该项目已采用 Microsoft开源行为准则。 有关详细信息,请参阅 行为准则常见问题解答 或与 opencode@microsoft.com 联系,了解任何其他问题或意见。