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 e como restaurar blobs excluídos por software durante o período de retenção.

Pré-requisitos

Configurar o ambiente

Se você não tiver um projeto existente, esta seção mostra como configurar um projeto para trabalhar com a biblioteca de cliente do Armazenamento de Blobs do Azure para Java. Para obter mais informações, consulte Introdução ao Armazenamento de Blobs do Azure e Java.

Para trabalhar com os exemplos de código neste artigo, siga estas etapas para configurar seu projeto.

Nota

Este artigo usa a ferramenta de compilação Maven para criar e executar o código de exemplo. Outras ferramentas de compilação, como o Gradle, também funcionam com o SDK do Azure para Java.

Instalar pacotes

Abra o arquivo no editor de pom.xml texto. Instale os pacotes incluindo o arquivo BOM ou incluindo uma dependência direta.

Adicionar instruções de importação

Adicione as seguintes instruções import:

import com.azure.core.http.rest.*;
import com.azure.core.util.*;
import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

Autorização

O mecanismo de autorização deve ter as permissões necessárias para excluir um blob ou para restaurar um blob excluído suavemente. Para autorização com o Microsoft Entra ID (recomendado), você precisa da função interna do RBAC do Azure RBAC Storage Blob Data Contributor ou superior. Para saber mais, consulte as diretrizes de autorização para Excluir Blob (API REST) e Undelete Blob (API REST).

Criar um objeto cliente

Para conectar um aplicativo ao Armazenamento de Blob, crie uma instância de BlobServiceClient.

O exemplo a seguir usa BlobServiceClientBuilder para criar um BlobServiceClient objeto usando DefaultAzureCredentialo , e mostra como criar clientes de contêiner e blob, se necessário:

// Azure SDK client builders accept the credential as a parameter
// TODO: Replace <storage-account-name> with your actual storage account name
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
        .endpoint("https://<storage-account-name>.blob.core.windows.net/")
        .credential(new DefaultAzureCredentialBuilder().build())
        .buildClient();

// If needed, you can create a BlobContainerClient object from the BlobServiceClient
BlobContainerClient containerClient = blobServiceClient
        .getBlobContainerClient("<container-name>");

// If needed, you can create a BlobClient object from the BlobContainerClient
BlobClient blobClient = containerClient
        .getBlobClient("<blob-name>");

Para saber mais sobre como criar e gerenciar objetos de cliente, consulte Criar e gerenciar objetos de cliente que interagem com recursos de dados.

Eliminar um blob

Nota

Quando a exclusão suave de blob está habilitada para uma conta de armazenamento, você não pode executar uma exclusão permanente usando métodos de biblioteca de cliente. Usando os métodos neste artigo, um blob, uma versão de blob ou instantâneo excluído suavemente permanece disponível até que o período de retenção expire, momento em que é excluído permanentemente. Para saber mais sobre a operação subjacente da API REST, consulte Excluir Blob (API REST).

Para excluir um blob, chame um dos seguintes 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.

Amostras de código

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:

Recursos da biblioteca do cliente

Consulte também

  • Este artigo faz parte do guia do desenvolvedor do Armazenamento de Blobs para Java. Para saber mais, consulte a lista completa de artigos do guia do desenvolvedor em Build your Java app.