分享方式:


透過 .NET 刪除及還原 Blob

本文說明如何使用適用於 .NET 的 Azure 儲存體用戶端程式庫刪除 Blob,以及如何在保留期間還原虛刪除的 Blob。

必要條件

設定您的環境

如果沒有現有的專案,本章節會說明如何設定專案以使用適用於 .NET 的 Azure Blob 儲存體用戶端程式庫。 這些步驟包括封裝安裝、新增 using 指示詞,以及建立已授權的用戶端物件。 如需詳細資訊,請參閱 開始使用 Azure Blob 儲存體和 .NET

安裝套件

從您的專案目錄中,使用 dotnet add package 命令安裝 Azure Blob 儲存體和 Azure 身分識別客戶端程式庫的套件。 需要 Azure.Identity 套件才能對 Azure 服務進行無密碼連線。

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 建立客戶端物件。 若要深入了解如何建立及管理用戶端物件,請參閱建立和管理與資料資源互動的用戶端端物件 (部分機器翻譯)。

授權

授權機制必須具有刪除 Blob 或還原虛刪除 Blob 的必要權限。 如需使用 Microsoft Entra ID 授權 (建議使用),您需要 Azure RBAC 內建角色儲存體 Blob 資料參與者或更高權限。 若要深入了解,請參閱刪除 Blob (REST API)取消刪除 Blob (REST API) 的授權指導。

刪除 Blob

注意

針對儲存體帳戶啟用 Blob 虛刪除時,您無法使用用戶端程式庫方法來執行永久刪除。 使用本文中的方法,虛刪除的 Blob、Blob 版本或快照集會維持可用狀態,直到保留期間到期,此時會永久刪除。 若要深入了解基礎 REST API 作業,請參閱刪除 Blob (REST API)。

若要刪除 Blob,請呼叫下列任一種方法:

下列範例會刪除 Blob:

public static async Task DeleteBlobAsync(BlobClient blob)
{
    await blob.DeleteAsync();
}

如果 Blob 具有任何相關聯的快照集,您必須刪除其所有快照集,才能刪除 Blob。 下列範例會刪除 Blob 及其快照集:

public static async Task DeleteBlobSnapshotsAsync(BlobClient blob)
{
    // Delete a blob and all of its snapshots
    await blob.DeleteAsync(snapshotsOption: DeleteSnapshotsOption.IncludeSnapshots);

    // Delete only the blob's snapshots
    //await blob.DeleteAsync(snapshotsOption: DeleteSnapshotsOption.OnlySnapshots);
}

刪除快照集,而不刪除 Blob 本身,您即可傳遞參數 DeleteSnapshotsOption.OnlySnapshots

還原已刪除的 Blob

Blob 虛刪除可保護個別的 Blob 及其版本、快照集和中繼資料,將刪除的資料保留在系統中一段指定時間,避免不小心刪除或覆寫資料。 在保留期間內,您可以在刪除時將 Blob 還原至其狀態。 保留期限到期後,即會永久刪除該 Blob。 如需關於 Blob 虛刪除的詳細資訊,請參閱 Blob 的虛刪除

您可以使用 Azure 儲存體用戶端程式庫來還原已虛刪除的 Blob 或快照集。

還原虛刪除 Blob 的方式,取決於您的儲存體帳戶是否已啟用 Blob 版本設定。 如需 Blob 版本設定的詳細資訊,請參閱 Blob 版本設定。 視您的情節而定,請參閱下列其中一個區段:

在停用版本控制時還原虛刪除的物件

若要在未啟用版本設定時還原已刪除的 Blob,請呼叫下列其中一種方法:

這些方法會還原虛刪除的 Blob,以及與其相關聯的任何已刪除快照集。 針對尚未刪除的 Blob 呼叫這些方法中的任一個沒有任何效果。 下列範例會還原容器中的所有虛刪除 Blob 及其快照集:

public static async Task RestoreBlobsAsync(BlobContainerClient container)
{
    foreach (BlobItem blob in container.GetBlobs(BlobTraits.None, BlobStates.Deleted))
    {
        await container.GetBlockBlobClient(blob.Name).UndeleteAsync();
    }
}

若要還原特定虛刪除的快照集,請先在基底 Blob 上呼叫取消刪除UndeleteAsync,然後在基底 Blob 上複製所需的快照集。 下列範例會將區塊 Blob 還原至最近產生的快照集:

public static async Task RestoreSnapshotsAsync(
    BlobContainerClient container,
    BlobClient blob)
{
    // Restore the deleted blob
    await blob.UndeleteAsync();

    // List blobs in this container that match prefix
    // Include snapshots in listing
    Pageable<BlobItem> blobItems = container.GetBlobs(
        BlobTraits.None,
        BlobStates.Snapshots,
        prefix: blob.Name);

    // Get the URI for the most recent snapshot
    BlobUriBuilder blobSnapshotUri = new BlobUriBuilder(blob.Uri)
    {
        Snapshot = blobItems
            .OrderByDescending(snapshot => snapshot.Snapshot)
            .ElementAtOrDefault(0)?.Snapshot
    };

    // Restore the most recent snapshot by copying it to the blob
    await blob.StartCopyFromUriAsync(blobSnapshotUri.ToUri());
}

啟用版本控制時還原虛刪除的 Blob

如果儲存體帳戶設定為啟用 Blob 版本設定,刪除 Blob 會導致目前版本的 Blob 變成先前的版本。 若要在啟用版本設定時還原虛刪除的 Blob,請在基底 Blob 上複製先前的版本。 您可以使用下列其中一種方法:

下列程式碼範例會說明如何取得已刪除 Blob 的最新版本,並將其複製到基底 Blob 來還原最新版本:

public static void RestoreBlobWithVersioning(
    BlobContainerClient container,
    BlobClient blob)
{
    // List blobs in this container that match prefix
    // Include versions in listing
    Pageable<BlobItem> blobItems = container.GetBlobs(
        BlobTraits.None,
        BlobStates.Version,
        prefix: blob.Name);

    // Get the URI for the most recent version
    BlobUriBuilder blobVersionUri = new BlobUriBuilder(blob.Uri)
    {
        VersionId = blobItems.
            OrderByDescending(version => version.VersionId).
            ElementAtOrDefault(0)?.VersionId
    };

    // Restore the most recently generated version by copying it to the base blob
    blob.StartCopyFromUri(blobVersionUri.ToUri());
}

資源

若要深入了解如何使用適用於 .NET 的 Azure Blob 儲存體用戶端程式庫來刪除 Blob 和還原已刪除的 Blob,請參閱下列資源。

程式碼範例

REST API 操作

適用於 .NET 的 Azure SDK 包含建置在 Azure REST API 之上的程式庫,可讓您透過熟悉的 .NET 典範與 REST API 作業進行互動。 用於刪除 Blob 和還原已刪除 Blob 的用戶端程式庫方法會使用下列 REST API 作業:

用戶端程式庫資源

另請參閱

  • 本文是適用於 .NET 的 Blob 儲存體開發人員指南的一部分。 若要深入了解,請參閱位於建置 .NET 應用程式的開發人員指南文章完整清單。