Eliminare e ripristinare un BLOB con Java
Questo articolo illustra come eliminare BLOB con la libreria client di Archiviazione di Azure per Javae come ripristinare BLOB eliminati temporaneamente durante il periodo di conservazione.
Prerequisiti
- Sottoscrizione di Azure: creare un account gratuito
- Account di archiviazione di Azure: creare un account di archiviazione
- Kit di sviluppo Java (JDK) versione 8 o successiva (è consigliabile usare la versione 17 per l’esperienza migliore)
- Per la gestione dei progetti in questo esempio viene usato Apache Maven
Configurazione dell'ambiente
Se non si ha un progetto esistente, questa sezione illustra come configurare un progetto per l’uso con la libreria client di Archiviazione BLOB di Azure per Java. Per altre informazioni, vedere Introduzione all’Archiviazione BLOB di Azure e Java.
Per usare gli esempi di codice in questo articolo, seguire questa procedura per configurare il progetto.
Nota
Questo articolo usa lo strumento di compilazione Maven per compilare ed eseguire il codice di esempio. Anche altri strumenti di compilazione, come Gradle, sono compatibili con Azure SDK per Java.
Installare i pacchetti
Aprire il file pom.xml
nell'editor di testo. Installare i pacchetti includendo il file BOM o includendo una dipendenza diretta.
Aggiungere le istruzioni di importazione
Aggiungere le istruzioni import
seguenti:
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;
Autorizzazione
Il meccanismo di autorizzazione deve disporre delle autorizzazioni necessarie per eliminare un BLOB o per ripristinare un BLOB eliminato temporaneamente. Per l'autorizzazione con Microsoft Entra ID (scelta consigliata), è necessario disporre del ruolo predefinito di Controllo degli accessi in base al ruolo di Azure Collaboratore ai dati del BLOB di archiviazione o ruolo superiore. Per altre informazioni, vedere le indicazioni sulle autorizzazioni per Delete Blob (API REST) e Undelete Blob (API REST).
Creare un oggetto client
Per connettere un'app ad Archiviazione BLOB, creare un'istanza di BlobServiceClient.
L’esempio seguente usa BlobServiceClientBuilder per compilare un oggetto BlobServiceClient
usando DefaultAzureCredential
e illustra come creare client blob e contenitori, se necessario:
// 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>");
Per altre informazioni sulla creazione e la gestione di oggetti client, vedere Creare e gestire oggetti client che interagiscono con le risorse dati.
Eliminare un BLOB
Nota
Quando l’eliminazione temporanea del BLOB è abilitata per un account di archiviazione, non è possibile eseguire un’eliminazione permanente usando i metodi della libreria client. Usando i metodi descritti in questo articolo, un BLOB eliminato temporaneamente, una versione del BLOB o uno snapshot rimangono disponibili fino alla scadenza del periodo di conservazione, dopodiché vengono eliminati definitivamente. Per altre informazioni sull'operazione dell'API REST sottostante, vedere Eliminare BLOB (API REST).
Per eliminare un BLOB, chiamare uno dei metodi seguenti:
Nell'esempio seguente viene eliminato un oggetto BLOB:
public void deleteBlob(BlobClient blobClient) {
blobClient.delete();
}
Se il BLOB presenta snapshot associati, è necessario eliminare tutti gli snapshot per eliminare il BLOB. Nell'esempio seguente viene eliminato un BLOB e i relativi snapshot con una risposta:
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());
}
}
Per eliminare solo gli snapshot e non il BLOB stesso, è possibile passare il parametro DeleteSnapshotsOptionType.ONLY
.
Ripristinare un BLOB eliminato
L'eliminazione temporanea dei BLOB protegge un singolo BLOB con le sue versioni, gli snapshot e i metadati da eliminazioni o sovrascritture accidentali, mantenendo i dati eliminati nel sistema per un periodo di tempo specificato. Durante il periodo di conservazione è possibile ripristinare il BLOB nello stato in cui era al momento dell'eliminazione. Dopo la scadenza del periodo di conservazione, il BLOB viene eliminato definitivamente. Per altre informazioni sull'eliminazione temporanea dei BLOB, vedere Eliminazione temporanea per i BLOB.
È possibile usare le librerie client di Archiviazione di Azure per ripristinare un BLOB o uno snapshot eliminato temporaneamente.
La modalità di ripristino di un BLOB eliminato temporaneamente dipende dal fatto che l'account di archiviazione disponga o meno del controllo delle versioni per i BLOB abilitato. Per altre informazioni sul controllo delle versioni dei BLOB, vedere Controllo delle versioni per i BLOB. Passare a una delle sezioni seguenti in base allo scenario:
- Il controllo delle versioni dei BLOB non è abilitato
- Il controllo delle versioni dei BLOB è abilitato
Ripristinare gli oggetti eliminati temporaneamente quando il controllo delle versioni è disabilitato
Per ripristinare i BLOB eliminati, chiamare il metodo seguente:
Questo metodo ripristina il contenuto e i metadati di un BLOB eliminato temporaneamente e di eventuali snapshot eliminati temporaneamente associati. Chiamare questo metodo per un BLOB che non è stato eliminato non ha alcun effetto.
public void restoreBlob(BlobClient blobClient) {
blobClient.undelete();
}
Ripristinare gli oggetti eliminati temporaneamente quando è abilitato il controllo delle versioni
Se un account di archiviazione è configurato per abilitare il controllo delle versioni dei BLOB, l'eliminazione di un BLOB fa sì che la versione corrente del BLOB diventi la versione precedente. Per ripristinare un BLOB eliminato temporaneamente quando è abilitato il controllo delle versioni, copiare una versione precedente sul BLOB di base. È possibile usare il metodo seguente:
Questo metodo ripristina il contenuto e i metadati di un BLOB eliminato temporaneamente e di eventuali snapshot eliminati temporaneamente associati. Chiamare questo metodo per un BLOB che non è stato eliminato non ha alcun effetto.
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());
}
Ripristinare BLOB e directory eliminati temporaneamente (spazio dei nomi gerarchico)
Importante
Questa sezione si applica solo agli account con uno spazio dei nomi gerarchico.
Per iniziare, aprire il file pom.xml nell'editor di testo. Aggiungere l'elemento di dipendenza seguente al gruppo di dipendenze.
<dependency> <groupId>com.azure</groupId> <artifactId>azure-storage-file-datalake</artifactId> <version>12.6.0</version> </dependency>
Aggiungere quindi queste istruzioni importanti al file di codice.
Put imports here
Il frammento di codice seguente ripristina un file eliminato temporaneamente denominato
my-file
.Questo metodo presuppone che sia stata creata un'istanza DataLakeServiceClient. Per informazioni su come creare un'istanza DataLakeServiceClient, vedere Connettersi all'account.
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 si rinomina la directory che contiene gli elementi eliminati temporaneamente, tali elementi vengono disconnessi dalla directory. Se si vogliono ripristinare tali elementi, sarà necessario ripristinare il nome originale della directory o creare una directory separata che usa il nome della directory originale. In caso contrario, quando si tenta di ripristinare gli elementi eliminati temporaneamente si riceve un errore.
Risorse
Per altre informazioni su come eliminare i BLOB e ripristinare i BLOB eliminati usando la libreria client di Archiviazione BLOB di Azure per Java, vedere le risorse seguenti.
Esempi di codice
Operazioni dell'API REST
Azure SDK per Java contiene librerie basate sull'API REST di Azure, che consentono di interagire con le operazioni dell'API REST tramite paradigmi Java noti. I metodi della libreria client per eliminare i BLOB e ripristinare i BLOB eliminati fanno uso delle operazioni API REST seguenti:
- Delete Blob (API REST)
- Undelete Blob (API REST)
Risorse della libreria client
- Documentazione di riferimento della libreria client
- Codice sorgente della libreria client
- Pacchetto (Maven)
Vedi anche
Contenuto correlato
- Questo articolo fa parte della guida per sviluppatori di Archiviazione BLOB per Java. Per altre informazioni, vedere l'elenco completo degli articoli della Guida per sviluppatori in Creare la propria app Java.