Compartir vía


Eliminación y restauración de un blob con Java

En este artículo se muestra cómo eliminar blobs con la biblioteca de clientes de Azure Storage de Java. 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 Java. Para obtener información sobre cómo configurar el proyecto, incluida la instalación de paquetes, la adición de directivas de import y la autorización de un objeto de cliente, consulte Introducción a Azure Storage y Java.
  • El mecanismo de autorización debe tener permisos para eliminar un contenedor de blobs o para restaurar un contenedor eliminado temporalmente. Para obtener 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 uno de estos métodos:

En el ejemplo siguiente se elimina un blob:

public void deleteBlob(BlobClient blobClient) {
    blobClient.delete();
}

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 con una respuesta:

public void deleteBlobWithSnapshots(BlobClient blobClient) {
    Response<Boolean> response = blobClient.deleteIfExistsWithResponse(DeleteSnapshotsOptionType.INCLUDE, null,
            null,
            new Context("key", "value"));
    if (response.getStatusCode() == 404) {
        System.out.println("Blob does not exist");
    } else {
        System.out.printf("Delete blob completed with status %d%n", response.getStatusCode());
    }
}

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

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, llame al método siguiente:

Este método restaura el contenido y los metadatos de un blob eliminado temporalmente y las instantáneas asociadas eliminadas temporalmente. La llamada a este método para un blob que no se haya eliminado no tiene ningún efecto.

public void restoreBlob(BlobClient blobClient) {
    blobClient.undelete();
}

Restauración de objetos 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 el método siguiente:

Este método restaura el contenido y los metadatos de un blob eliminado temporalmente y las instantáneas asociadas eliminadas temporalmente. La llamada a este método para un blob que no se haya eliminado no tiene ningún efecto.

public void restoreBlobVersion(BlobContainerClient containerClient, BlobClient blobClient){
    // List blobs in this container that match the prefix
    // Include versions in the listing
    ListBlobsOptions options = new ListBlobsOptions()
            .setPrefix(blobClient.getBlobName())
            .setDetails(new BlobListDetails()
                    .setRetrieveVersions(true));
    Iterator<BlobItem> blobItem = containerClient.listBlobs(options, null).iterator();
    List<String> blobVersions = new ArrayList<>();
    while (blobItem.hasNext()) {
        blobVersions.add(blobItem.next().getVersionId());
    }

    // Sort the list of blob versions and get the most recent version ID
    Collections.sort(blobVersions, Collections.reverseOrder());
    String latestVersion = blobVersions.get(0);

    // Get a client object with the name of the deleted blob and the specified version
    BlobClient blob = containerClient.getBlobVersionClient("sampleBlob.txt", latestVersion);

    // Restore the most recent version by copying it to the base blob
    blobClient.copyFromUrl(blob.getBlobUrl());
}

Restauración de blobs y directorios eliminados temporalmente (espacio de nombres jerárquico)

Importante

Esta sección solo se aplica a las cuentas que tienen un espacio de nombres jerárquico.

  1. Para empezar, abra el archivo pom.xml en el editor de texto. Agregue el siguiente elemento de dependencia al grupo de dependencias.

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-file-datalake</artifactId>
      <version>12.6.0</version>
    </dependency>
    
  2. Luego, agregue estas instrucciones Imports al archivo de código.

    Put imports here
    
  3. El fragmento de código siguiente restaura un archivo eliminado temporalmente llamado my-file.

    Este método supone que ha creado una instancia de DataLakeServiceClient. Para obtener información sobre cómo crear una instancia de DataLakeServiceClient, consulte Conexión a la cuenta.

    
    public void RestoreFile(DataLakeServiceClient serviceClient){
    
        DataLakeFileSystemClient fileSystemClient =
            serviceClient.getFileSystemClient("my-container");
    
        DataLakeFileClient fileClient =
            fileSystemClient.getFileClient("my-file");
    
        String deletionId = null;
    
        for (PathDeletedItem item : fileSystemClient.listDeletedPaths()) {
    
            if (item.getName().equals(fileClient.getFilePath())) {
               deletionId = item.getDeletionId();
            }
        }
    
        fileSystemClient.restorePath(fileClient.getFilePath(), deletionId);
     }
    
    

    Si cambia el nombre del directorio que contiene los elementos eliminados temporalmente, esos elementos se desconectan del directorio. Si desea restaurar esos elementos, tendrá que revertir el nombre del directorio al nombre original o crear un directorio independiente que use el nombre del directorio original. De lo contrario, recibirá un error al intentar restaurar esos elementos eliminados temporalmente.

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 Java, consulte los siguientes recursos.

Operaciones de API REST

El SDK de Azure para Java 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 Java. 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