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

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

先决条件

  • 本文假设已经设置了项目来使用适用于 .NET 的 Azure Blob 存储客户端库。 要了解有关设置项目的信息,包括包安装、添加 using 指令和创建授权客户端对象,请参阅开始使用 Azure Blob 存储和 .NET
  • 授权机制必须具有设置 blob 的访问层的权限。 若要了解详细信息,请参阅以下 REST API 操作的授权指南:

关于块 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 操作:

客户端库资源

代码示例

另请参阅