你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 .NET 设置或更改块 blob 的访问层

本文介绍了如何使用适用于 .NET 的 Azure 存储客户端库设置或更改块 blob 的访问层。

先决条件

设置你的环境

如果没有现有项目,请查看本部分,其中介绍如何设置项目来使用适用于 .NET 的 Azure Blob 存储客户端库。 步骤包括安装包、添加 using 指令,以及创建已授权的客户端对象。 有关详细信息,请参阅 Azure Blob 存储和 .NET 入门

安装包

从项目目录中,使用 dotnet add package 命令安装 Azure Blob 存储和 Azure 标识客户端库的包。 与 Azure 服务的无密码连接需要 azure-identity 包。

dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity

添加 using 指令

将这些 using 指令添加到代码文件的顶部:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;

本文中的某些代码示例可能需要其他 using 指令。

创建客户端对象

若要将应用连接到 Blob 存储,请创建 BlobServiceClient 的实例。 以下示例演示如何使用 DefaultAzureCredential 创建客户端对象进行授权:

public BlobServiceClient GetBlobServiceClient(string accountName)
{
    BlobServiceClient client = new(
        new Uri($"https://{accountName}.blob.core.windows.net"),
        new DefaultAzureCredential());

    return client;
}

还可在 .NET 应用中为依赖项注入注册服务客户端。 要详细了解如何创建和管理客户端对象,请参阅 创建和管理与数据资源交互的客户端对象

授权

授权机制必须具有设置 blob 的访问层所需的权限。 若要使用 Microsoft Entra ID 进行授权(建议),需要 Azure RBAC 内置角色“存储 Blob 数据参与者”或更高级别的角色。 有关详细信息,请参阅设置 Blob 层的授权指南。

关于块 blob 访问层

要管理存储需求产生的成本,根据数据的访问频率和所需的保留期来整理数据会很有帮助。 Azure 存储提供不同的访问层,以便你可以基于使用方式,以最具成本效益的方式存储 Blob 数据。

Blob 数据的访问层

Azure 存储访问层包括:

  • 热层 - 适用于存储经常访问或修改的数据的联机层。 热层的存储成本最高,但访问成本最低。
  • 冷层 - 适用于存储不经常访问或修改的数据的联机层。 冷层中的数据应至少存储 30 天。 与热层相比,冷层的存储成本较低,访问成本较高。
  • 寒层 - 适用于存储不经常访问或修改的数据的联机层。 寒层中的数据应至少存储 90 天。 与冷层相比,寒层的存储成本较低,访问成本较高。
  • 存档层 - 适用于存储极少访问且延迟要求(以小时计)不严格的数据的脱机层。 存档层中的数据应至少存储 180 天。

若要详细了解访问层,请参阅 Blob 数据的访问层

当 Blob 位于存档访问层时,则会将其视为处于脱机状态,无法读取或修改。 若要读取或修改存档 Blob 中的数据,必须先将 Blob 解除冻结到联机层。 若要详细了解如何将 Blob 从存档层解除冻结到联机层,请参阅从存档层解除冻结 Blob

限制

仅允许在块 Blob 上设置访问层。 若要了解有关设置块 Blob 访问层的限制的详细信息,请参阅设置 Blob 层 (REST API)

注意

要使用 .NET 将访问层设置为 Cold,必须至少使用客户端库版本 12.15.0。

在上传期间设置 Blob 的访问层

可以使用 BlobUploadOptions 类在上传时设置 blob 的访问层。 以下代码示例演示如何在上传 blob 时设置访问层:

public static async Task UploadWithAccessTierAsync(
    BlobContainerClient containerClient,
    string localFilePath)
{
    string fileName = Path.GetFileName(localFilePath);
    BlockBlobClient blockBlobClient = containerClient.GetBlockBlobClient(fileName);

    var uploadOptions = new BlobUploadOptions()
    {
        AccessTier = AccessTier.Cool
    };

    FileStream fileStream = File.OpenRead(localFilePath);
    await blockBlobClient.UploadAsync(fileStream, uploadOptions);
    fileStream.Close();
}

要详细了解如何使用 .NET 上传 blob,请参阅使用 .NET 上传 blob

更改现有的块 blob 的访问层

可以使用以下函数之一更改现有的块 blob 的访问层:

以下代码示例演示如何将现有 blob 的访问层更改为 Cool

public static async Task ChangeBlobAccessTierAsync(
    BlobClient blobClient)
{
    // Change the access tier of the blob to cool
    await blobClient.SetAccessTierAsync(AccessTier.Cool);
}

如果要解除存档的 blob 的冻结,可以选择将 rehydratePriority 参数设置为 HighStandard

将 blob 复制到不同的访问层

可以通过将访问层指定为复制操作的一部分来更改现有块 blob 的访问层。 要在复制操作期间更改访问层,请使用 BlobCopyFromUriOptions 类并指定 AccessTier 属性。 如果要使用复制操作从存档层解除 blob 的冻结,可以选择将 RehydratePriority 属性设置为 HighStandard

下面的代码示例演示如何使用复制操作将存档的 blob 解除冻结到 Hot 层:

public static async Task RehydrateBlobUsingCopyAsync(
    BlobClient sourceArchiveBlob,
    BlobClient destinationRehydratedBlob)
{
    // Note: the destination blob must have a different name than the archived source blob

    // Configure copy options to specify hot tier and standard priority
    BlobCopyFromUriOptions copyOptions = new()
    {
        AccessTier = AccessTier.Hot,
        RehydratePriority = RehydratePriority.Standard
    };

    // Copy source blob from archive tier to destination blob in hot tier
    CopyFromUriOperation copyOperation = await destinationRehydratedBlob
        .StartCopyFromUriAsync(sourceArchiveBlob.Uri, copyOptions);
    await copyOperation.WaitForCompletionAsync();
}

要详细了解如何使用 .NET 复制 blob,请参阅使用 .NET 复制 blob

资源

要详细了解如何使用适用于 .NET 的 Azure Blob 存储客户端库来设置访问层,请参阅以下资源。

REST API 操作

Azure SDK for .NET 包含基于 Azure REST API 而生成的库,允许你通过熟悉的 .NET 范例与 REST API 操作进行交互。 用于设置访问层的客户端库方法使用以下 REST API 操作:

客户端库资源

代码示例

另请参阅