Compartilhar via


Excluir e restaurar um blob com Java

Este artigo mostra como excluir blobs com a biblioteca de clientes do Armazenamento do Azure para Java. Se você tiver habilitado a exclusão temporária para blobs, poderá restaurar blobs 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 clientes do Armazenamento de Blobs do Azure para Java. Para saber mais sobre como configurar seu projeto, incluindo a instalação de pacote, adição de import diretivas e criação e autorização do objeto do cliente, consulte Introdução ao Armazenamento do Microsoft Azure e Java.
  • O mecanismo de autorização deve ter permissões para excluir um contêiner de blob ou restaurar um contêiner excluído temporariamente. Para saber mais, confira as diretrizes de autorização para as seguintes operações de API REST:

Excluir um blob

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

O seguinte exemplo 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 seguinte exemplo 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, passe o parâmetro DeleteSnapshotsOptionType.ONLY.

Restaurar um blob excluído

A exclusão reversível de blobs protege um blob individual e suas versões, instantâneos e metadados de exclusões ou substituições acidentais, mantendo os dados excluídos no sistema por um período de tempo especificado. Durante o período de retenção, você pode restaurar o blob para seu estado na exclusão. Depois que o período de retenção expirar, o blob será excluído permanentemente. Para obter mais informações sobre a exclusão reversível de blobs, consulte Exclusão reversível de blobs.

Você pode usar as bibliotecas clientes de armazenamento do Azure para restaurar um blob ou instantâneo excluído de maneira reversível.

A forma como você restaura um blob com exclusão temporária depende de sua conta de armazenamento ter ou não o controle de versão de blob habilitado. Para obter mais informações sobre o controle de versão de blob, consulte Controle de versão de blob. Confira uma das seguintes seções dependendo de seu cenário:

Restaurar objetos excluídos de maneira reversível quando o controle de versão estiver desabilitado

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

Esse método restaura o conteúdo e os metadados de um blob exlcluído temporariamente e todos os instantâneos excluídos temporariamente associados. Chamar este método em um blob que não foi excluído não tem efeito.

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

Restaurar objetos excluídos temporariamente quando o controle de versão está habilitado

Se uma conta de armazenamento estiver configurada para habilitar o controle de versão do blob, excluir um blob fará com que a versão atual do blob se torne a versão anterior. Para restaurar um blob com exclusão temporária 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 exlcluído temporariamente e todos os instantâneos excluídos temporariamente associados. Chamar este método em 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 temporariamente (namespace hierárquico)

Importante

Esta seção se aplica somente a contas que têm o 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 estas instruções de importação ao arquivo de código.

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

    Esse método supõe que você criou uma instância DataLakeServiceClient. Para aprender a criar uma instância DataLakeServiceClient, confira Conectar à 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 temporariamente, esses itens serão desconectados do diretório. Para restaurar esses itens, é preciso reverter o nome do diretório para o nome original ou criar outro diretório que use o nome original. Caso contrário, você receberá uma mensagem de erro ao tentar restaurar os itens excluídos temporariamente.

Recursos

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

Operações da API REST

O SDK do Azure para Java contém bibliotecas que criam sobre a API REST do Azure, permitindo a interação com as operações de API REST por meio de paradigmas conhecidos do Java. Os métodos da biblioteca de clientes para exclusão de blobs e restauração de blobs excluídos usam as seguintes operações da API REST:

Exemplos de código

Recursos da biblioteca de clientes

Confira também