共用方式為


透過 .NET 刪除及還原 Blob

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

必要條件

  • 本文假設您已有設定好要搭配適用於 .NET 的 Azure Blob 儲存體用戶端程式庫使用的專案。 若要了解如何設定專案,包括安裝套件、新增 using 指示詞,以及建立授權的用戶端物件,請參閱開始使用 Azure Blob 儲存體和 .NET
  • 授權機制必須具有刪除 Blob 或還原虛刪除 Blob 的權限。 若要深入了解,請參閱下列 REST API 作業的授權指引:

刪除 Blob

若要刪除 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 作業:

程式碼範例

用戶端程式庫資源

另請參閱