Partilhar via


Excluir e restaurar um blob com Java

Este artigo mostra como excluir blobs com a biblioteca de cliente do Armazenamento do Azure para Java. Se você tiver habilitado a exclusão suave para blobs, poderá restaurá-los excluídos durante o período de retenção.

Pré-requisitos

  • Este artigo pressupõe que você já tenha um projeto configurado para trabalhar com a biblioteca de cliente do Armazenamento de Blobs do Azure para Java. Para saber mais sobre como configurar seu projeto, incluindo a instalação de pacotes, adicionar import diretivas e criar um objeto de cliente autorizado, consulte Introdução ao Armazenamento do Azure e Java.
  • O mecanismo de autorização deve ter permissões para excluir um blob ou para restaurar um blob excluído suavemente. Para saber mais, consulte as diretrizes de autorização para as seguintes operações de API REST:

Eliminar um blob

Para excluir um blob, chame um destes métodos:

O exemplo a seguir exclui um blob:

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

Se o blob tiver instantâneos associados, você deverá excluir todos os seus instantâneos para excluir o blob. O exemplo a seguir exclui um blob e seus instantâneos com uma resposta:

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 excluir apenas os instantâneos e não o blob em si, você pode passar o parâmetro DeleteSnapshotsOptionType.ONLY.

Restaurar um blob excluído

A eliminação recuperável de blobs protege um blob individual e as respetivas versões, instantâneos e metadados contra eliminações ou substituições acidentais, mantendo os dados eliminados no sistema durante um período de tempo especificado. Durante o período de retenção, pode restaurar o blob para o estado em que estava no momento da eliminação. Quando o período de retenção expirar, o blob será eliminado permanentemente. Para obter mais informações sobre exclusão suave de blob, consulte Exclusão suave para blobs.

Você pode usar as bibliotecas de cliente do Armazenamento do Azure para restaurar um blob ou instantâneo excluído por software.

A forma como você restaura um blob excluído depende se sua conta de armazenamento tem ou não o controle de versão de blob habilitado. Para obter mais informações sobre controle de versão de blob, consulte Controle de versão de Blob. Consulte uma das seguintes seções, dependendo do seu cenário:

Restaurar objetos excluídos por software quando o controle de versão estiver desativado

Para restaurar blobs excluídos, chame o seguinte método:

Esse método restaura o conteúdo e os metadados de um blob excluído suavemente e quaisquer instantâneos excluídos por software associados. Chamar esse método para um blob que não foi excluído não tem efeito.

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

Restaurar objetos excluídos por software quando o controle de versão estiver habilitado

Se uma conta de armazenamento estiver configurada para habilitar o controle de versão de blob, excluir um blob fará com que a versão atual do blob se torne a versão anterior. Para restaurar um blob excluído suavemente quando o controle de versão estiver habilitado, copie uma versão anterior sobre o blob base. Você pode usar o seguinte método:

Esse método restaura o conteúdo e os metadados de um blob excluído suavemente e quaisquer instantâneos excluídos por software associados. Chamar esse método para um blob que não foi excluído não tem efeito.

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

Restaurar blobs e diretórios excluídos por software (namespace hierárquico)

Importante

Esta seção se aplica somente a contas que têm um namespace hierárquico.

  1. Para começar, abra o arquivo pom.xml no editor de texto. Adicione o seguinte elemento de dependência ao grupo de dependências.

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-file-datalake</artifactId>
      <version>12.6.0</version>
    </dependency>
    
  2. Em seguida, adicione essas instruções imports ao seu arquivo de código.

    Put imports here
    
  3. O trecho a seguir restaura um arquivo excluído suavemente chamado my-file.

    Esse método pressupõe que você criou uma instância DataLakeServiceClient . Para saber como criar uma instância DataLakeServiceClient , consulte Conectar-se à conta.

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

    Se você renomear o diretório que contém os itens excluídos por software, esses itens serão desconectados do diretório. Se quiser restaurar esses itens, você terá que reverter o nome do diretório de volta ao seu nome original ou criar um diretório separado que use o nome do diretório original. Caso contrário, você receberá um erro quando tentar restaurar esses itens excluídos suavemente.

Recursos

Para saber mais sobre como excluir blobs e restaurar blobs excluídos usando a biblioteca de cliente do Armazenamento de Blobs do Azure para Java, consulte os recursos a seguir.

Operações da API REST

O SDK do Azure para Java contém bibliotecas que se baseiam na API REST do Azure, permitindo que você interaja com operações da API REST por meio de paradigmas Java familiares. Os métodos da biblioteca de cliente para excluir blobs e restaurar blobs excluídos usam as seguintes operações da API REST:

Amostras de código

Recursos da biblioteca do cliente

Consulte também