Share via


Eliminación y restauración de un blob con .NET

En este artículo se muestra cómo eliminar blobs con la biblioteca cliente de Azure Storage para .NET. Si ha habilitado la eliminación temporal de blobs, puede restaurar los blobs eliminados durante el período de retención.

Requisitos previos

  • En este artículo se supone que ya tiene un proyecto configurado para trabajar con la biblioteca cliente de Azure Blob Storage para .NET. Para obtener información sobre cómo configurar el proyecto, incluida la instalación de paquetes, la adición de directivas de using y la autorización de un objeto de cliente, consulte Introducción a Azure Blob Storage y .NET.
  • El mecanismo de autorización debe tener permisos para eliminar un contenedor de blobs o para restaurar un contenedor eliminado temporalmente. Para más información, consulte la guía de autorización para las siguientes operaciones de la API de REST:

Eliminar un blob

Para eliminar un blob, llame a cualquiera de estos métodos:

En el ejemplo siguiente se elimina un blob:

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

Si el blob tiene instantáneas asociadas, debe eliminar todas sus instantáneas para eliminar el blob. En el ejemplo siguiente se elimina un blob y sus instantáneas:

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

Para eliminar solo las instantáneas y no el propio blob, puede pasar el parámetro DeleteSnapshotsOption.OnlySnapshots.

Restauración de un blob eliminado

La eliminación temporal de blobs protege a cada uno de los blobs y sus versiones, instantáneas y metadatos de errores accidentales al borrar o sobrescribir los datos, ya que conserva en el sistema los datos eliminados durante el período de tiempo que se especifique. Durante este período de retención, los blobs pueden restaurarse a su estado original. Una vez vencido el período de retención especificado, el blob se elimina permanentemente. Para más información sobre la eliminación temporal, consulte este artículo sobre la eliminación temporal de blobs.

Puede usar las bibliotecas cliente de Azure Storage para restaurar un blob o una instantánea eliminados temporalmente.

La forma en que restaura un blob eliminado temporalmente depende de si la cuenta de almacenamiento tiene habilitado el control de versiones de blobs. Para más información sobre el control de versiones de blobs, consulte Control de versiones de blobs. Consulte una de las secciones siguientes en función de su escenario:

Restauración de objetos eliminados temporalmente cuando el control de versiones está deshabilitado

Para restaurar blobs eliminados cuando el control de versiones no está habilitado, llame a cualquiera de los métodos siguientes:

Estos métodos restauran los blobs eliminados temporalmente y las instantáneas eliminadas asociadas a ellos. Llamar a cualquiera de estos métodos para un blob que no se haya eliminado no surte ningún efecto. En el ejemplo siguiente se restauran todos los blobs eliminados temporalmente y sus instantáneas en un contenedor:

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

Para restaurar una instantánea específica que se eliminara de manera temporal, primero llame a la operación Undelete o UndeleteAsync en el blob base y copie la instantánea deseada en el blob base. En el ejemplo siguiente se restaura un blob en bloques a la última instantánea generada:

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

Restauración de blobs eliminados temporalmente cuando el control de versiones está habilitado

Si una cuenta de almacenamiento está configurada para habilitar el control de versiones de blob, la eliminación de un blob hace que la versión actual del blob se convierta en la versión anterior. Para restaurar un blob eliminado temporalmente cuando el control de versiones está habilitado, copie una versión anterior en el blob base. Puede usar cualquiera de los métodos siguientes:

El siguiente ejemplo de código muestra cómo obtener la última versión de un blob eliminado y restaurarla copiándola en el blob base:

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

Recursos

Para obtener más información sobre cómo eliminar blobs y restaurar blobs eliminados usando la biblioteca cliente de Azure Blob Storage para .NET, consulte los siguientes recursos.

Operaciones de API REST

El SDK de Azure para .NET contiene bibliotecas que se crean a partir de la API REST de Azure, lo que le permite interactuar con las operaciones de API REST a través de paradigmas conocidos de .NET. Los métodos de la biblioteca cliente para eliminar blobs y restaurar blobs eliminados usan las siguientes operaciones de la API de REST:

Ejemplos de código

Recursos de la biblioteca cliente

Vea también