Löschen und Wiederherstellen eines Blobs mit .NET

In diesem Artikel wird gezeigt, wie Sie Blobs mithilfe der Azure Storage-Clientbibliothek für .NET löschen und wie Sie Blobs wiederherstellen, die während des Aufbewahrungszeitraums vorläufig gelöscht wurden.

Voraussetzungen

Erstellen Ihrer Umgebung

Wenn Sie nicht über ein vorhandenes Projekt verfügen, wird in diesem Abschnitt gezeigt, wie Sie ein Projekt für die Arbeit mit der Azure Blob Storage-Clientbibliothek für .NET einrichten. Die Schritte umfassen die Paketinstallation, das Hinzufügen von using-Anweisungen und das Erstellen eines autorisierten Clientobjekts. Ausführlichere Informationen finden Sie unter Erste Schritte mit Azure Blob Storage und .NET.

Installieren von Paketen

Installieren Sie in Ihrem Projektverzeichnis mithilfe des Befehls dotnet add package Pakete für die Azure Blob Storage- und Azure Identity-Clientbibliotheken. Für kennwortlose Verbindungen mit Azure-Diensten wird das Azure.Identity-Paket benötigt.

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

Fügen Sie Anweisungen vom Typ using hinzu.

Fügen Sie diese using-Anweisungen am Anfang der Codedatei hinzu:

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

Einige Codebeispiele in diesem Artikel erfordern möglicherweise zusätzliche using-Anweisungen.

Erstellen eines Clientobjekts

Um eine App mit Blob Storage zu verbinden, erstellen Sie eine Instanz von BlobServiceClient. Das folgende Beispiel zeigt, wie Sie ein Clientobjekt mithilfe von DefaultAzureCredential für die Autorisierung erstellen:

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

    return client;
}

Sie können einen Dienstclient für die Abhängigkeitsinjektion in einer .NET-App registrieren.

Sie können auch Clientobjekte für bestimmte Container oder Blobs erstellen. Weitere Informationen zum Erstellen und Verwalten von Clientobjekten finden Sie unter Erstellen und Verwalten von Clientobjekten, die mit Datenressourcen interagieren.

Autorisierung

Der Autorisierungsmechanismus muss über die erforderlichen Berechtigungen zum Löschen eines Blobs oder Wiederherstellen eines vorläufig gelöschten Blobs verfügen. Für die Autorisierung mit Microsoft Entra ID (empfohlen) benötigen Sie mindestens die integrierte Azure RBAC-Rolle Mitwirkender an Storage-Blobdaten. Weitere Informationen finden Sie in den Autorisierungsanleitungen für Blob löschen (REST API) und Blob löschen aufheben (REST API).

Löschen eines Blobs

Hinweis

Wenn „vorläufiges Löschen“ für Blobs in einem Speicherkonto aktiviert ist, können Sie mithilfe der Methoden aus der Clientbibliothek keinen dauerhaften Löschvorgang durchführen. Wenn Sie die Methoden in diesem Artikel verwenden, bleiben ein vorläufig gelöschtes Blob, eine Blobversion oder eine Momentaufnahme verfügbar, bis der Aufbewahrungszeitraum abläuft. Zu diesem Zeitpunkt erfolgt dann die dauerhafte Löschung. Weitere Informationen zum zugrunde liegenden REST-API-Vorgang finden Sie unter Blob löschen (REST-API).

Rufen Sie zum Löschen eines Blob eine der folgenden Methoden auf:

Im folgenden Beispiel wird ein Blob gelöscht:

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

Wenn das Blob über zugeordnete Momentaufnahmen verfügt, müssen Sie alle zugehörigen Momentaufnahmen löschen, um das Blob löschen zu können. Im folgenden Beispiel werden ein Blob und dessen Momentaufnahmen gelöscht:

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);
}

Um nur die Momentaufnahmen und nicht das Blob selbst zu löschen, können Sie den DeleteSnapshotsOption.OnlySnapshots-Parameter übergeben.

Wiederherstellen eines gelöschten Blobs

Vorläufiges Löschen von Blobs schützt ein einzelnes Blob sowie seine Versionen, Momentaufnahmen und Metadaten vor versehentlichen Lösch- oder Überschreibungsvorgängen, da die Daten für einen gewissen Zeitraum im System verbleiben. Während der Beibehaltungsdauer kann das Blob in dem Zustand wiederhergestellt werden, in dem es sich zum Zeitpunkt der Löschung befand. Nach Ablauf der Beibehaltungsdauer wird das Blob endgültig gelöscht. Weitere Informationen zum vorläufigen Löschen von Blobs finden Sie unter Vorläufiges Löschen für Blobs.

Sie können die Azure Storage-Clientbibliotheken verwenden, um vorläufig gelöschte Blobs oder Momentaufnahmen wiederherzustellen.

Wie Sie ein vorläufig gelöschtes Blob wiederherstellen, hängt davon ab, ob für Ihr Speicherkonto die Blobversionsverwaltung aktiviert ist. Weitere Informationen zur Blobversionsverwaltung finden Sie unter Blobversionsverwaltung. Lesen Sie je nach Ihrem Szenario einen der folgenden Abschnitte:

Wiederherstellen vorläufig gelöschter Objekte bei deaktivierter Versionsverwaltung

Um gelöschte Blobs wiederherzustellen, wenn die Versionsverwaltung nicht aktiviert ist, rufen Sie eine der folgenden Methoden auf:

Diese Methoden stellen vorläufig gelöschte Blobs und alle damit verbundenen gelöschten Momentaufnahmen wieder her. Das Aufrufen einer dieser Methoden für ein Blob, das nicht gelöscht wurde, hat keine Auswirkungen. Im folgenden Beispiel werden alle vorläufig gelöschten Blobs und deren Momentaufnahmen in einem Container wiederhergestellt:

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

Wenn Sie eine spezifische vorläufig gelöschte Momentaufnahme wiederherstellen möchten, rufen Sie den Vorgang Undelete oder UndeleteAsync zunächst für das Basisblob auf, und kopieren Sie die gewünschte Momentaufnahme über das Basisblob. Im folgenden Beispiel wird die zuletzt generierte Momentaufnahme eines Blockblobs wiederhergestellt:

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());
}

Wiederherstellen vorläufig gelöschter Objekte bei aktivierter Versionsverwaltung

Wenn ein Speicherkonto für die Aktivierung der Blobversionsverwaltung konfiguriert ist, führt das Löschen eines Blobs dazu, dass die aktuelle Version des Blobs zur vorherigen Version wird. Um ein vorläufig gelöschtes Blob bei aktivierter Versionsverwaltung wiederherzustellen, kopieren Sie eine vorherige Version über das Basisblob. Dazu können Sie eine der folgenden Methoden verwenden:

Im folgenden Codebeispiel wird die neueste Version eines gelöschten Blobs abgerufen und die aktuellste Version durch Kopieren in das Basisblob wiederhergestellt:

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());
}

Ressourcen

Weitere Informationen zum Löschen von Blobs und zum Wiederherstellen gelöschter Blobs mithilfe der Azure Blob Storage-Clientbibliothek für .NET finden Sie in den folgenden Ressourcen.

Codebeispiele

REST-API-Vorgänge

Das Azure SDK für .NET enthält Bibliotheken, die auf der zugrunde liegenden Azure-REST-API basieren, und ermöglicht Ihnen dadurch die Interaktion mit REST-API-Vorgängen über vertraute .NET-Paradigmen. Die Methoden der Clientbibliothek zum Löschen oder Wiederherstellen von Blobs verwenden die folgenden REST-API-Vorgänge:

Ressourcen zur Clientbibliothek

Siehe auch

  • Dieser Artikel ist Teil des Blob Storage-Entwicklerleitfadens für .NET. Weitere Informationen finden Sie in der vollständigen Liste der Entwicklerleitfadenartikel unter Erstellen Ihrer .NET-App.