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 PowerShell 或 Azure 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 示例入门:
Contributing
有关生成、测试和参与这些库的详细信息,请参阅 存储 CONTRIBUTING.md 。
此项目欢迎贡献和建议。 大多数贡献要求你同意参与者许可协议(CLA),声明你有权(实际这样做)授予我们使用你的贡献的权利。 有关详细信息,请访问 cla.microsoft.com。
该项目已采用 Microsoft开源行为准则。 有关详细信息,请参阅 行为准则常见问题解答 或与 opencode@microsoft.com 联系,了解任何其他问题或意见。