Eliminare e ripristinare un BLOB con .NET
Questo articolo illustra come eliminare i BLOB con la libreria client di Archiviazione di Azure per .NET e 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
- Ultima versione di .NET SDK per il sistema operativo in uso. Assicurarsi di ottenere l'SDK e non il runtime.
Configurazione dell'ambiente
Se non si ha un progetto esistente, questa sezione spiega come configurare un progetto per l'uso con la libreria client di Archiviazione BLOB di Azure per .NET. I passaggi includono l'installazione del pacchetto, l'aggiunta di direttive using
e la creazione di un oggetto client autorizzato. Per informazioni dettagliate, vedere Introduzione ad Archiviazione BLOB di Azure e .NET.
Installare i pacchetti
Nella directory del progetto installare i pacchetti per le librerie client di Archiviazione BLOB di Azure e Azure Identity usando il comando dotnet add package
. Il pacchetto Azure.Identity è necessario per le connessioni senza password ai servizi di Azure.
dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity
Aggiungere le direttive using
Aggiungere queste direttive using
all'inizio del file del codice:
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
Alcuni esempi di codice in questo articolo potrebbero richiedere direttive using
aggiuntive.
Creare un oggetto client
Per connettere un'app ad Archiviazione BLOB, creare un'istanza di BlobServiceClient. Nell'esempio seguente viene illustrato come creare un oggetto client usando DefaultAzureCredential
per l'autorizzazione:
public BlobServiceClient GetBlobServiceClient(string accountName)
{
BlobServiceClient client = new(
new Uri($"https://{accountName}.blob.core.windows.net"),
new DefaultAzureCredential());
return client;
}
È possibile registrare un client del servizio per l'inserimento delle dipendenze in un'app .NET.
È anche possibile creare oggetti client per contenitori o BLOB specifici. Per altre informazioni sulla creazione e la gestione di oggetti client, vedere Creare e gestire oggetti client che interagiscono con le risorse dati.
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).
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:
L'esempio seguente elimina un BLOB:
public static async Task DeleteBlobAsync(BlobClient blob)
{
await blob.DeleteAsync();
}
Se il BLOB ha snapshot associati, è necessario eliminare tutti gli snapshot per eliminare il BLOB. L'esempio seguente elimina un BLOB e i suoi snapshot:
public static async Task DeleteBlobSnapshotsAsync(BlobClient blob)
{
// Delete a blob and all of its snapshots
await blob.DeleteAsync(snapshotsOption: DeleteSnapshotsOption.IncludeSnapshots);
// Delete only the blob's snapshots
//await blob.DeleteAsync(snapshotsOption: DeleteSnapshotsOption.OnlySnapshots);
}
Per eliminare solo gli snapshot e non il BLOB stesso, è possibile passare il parametro DeleteSnapshotsOption.OnlySnapshots
.
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 quando il controllo delle versioni non è abilitato, chiamare uno dei metodi seguenti:
Questi metodi ripristinano i BLOB eliminati temporaneamente e tutti gli snapshot eliminati associati. Chiamare uno di questi metodi per un BLOB che non è stato eliminato non ha alcun effetto. L'esempio seguente ripristina tutti i BLOB eliminati temporaneamente e i relativi snapshot in un contenitore:
public static async Task RestoreBlobsAsync(BlobContainerClient container)
{
foreach (BlobItem blob in container.GetBlobs(BlobTraits.None, BlobStates.Deleted))
{
await container.GetBlockBlobClient(blob.Name).UndeleteAsync();
}
}
Per ripristinare uno specifico snapshot eliminato temporaneamente, chiamare prima di tutto Undelete o UndeleteAsync nel BLOB di base, quindi copiare lo snapshot desiderato sul BLOB di base. L'esempio seguente ripristina un BLOB in blocchi all'ultimo snapshot generato:
public static async Task RestoreSnapshotsAsync(
BlobContainerClient container,
BlobClient blob)
{
// Restore the deleted blob
await blob.UndeleteAsync();
// List blobs in this container that match prefix
// Include snapshots in listing
Pageable<BlobItem> blobItems = container.GetBlobs(
BlobTraits.None,
BlobStates.Snapshots,
prefix: blob.Name);
// Get the URI for the most recent snapshot
BlobUriBuilder blobSnapshotUri = new BlobUriBuilder(blob.Uri)
{
Snapshot = blobItems
.OrderByDescending(snapshot => snapshot.Snapshot)
.ElementAtOrDefault(0)?.Snapshot
};
// Restore the most recent snapshot by copying it to the blob
await blob.StartCopyFromUriAsync(blobSnapshotUri.ToUri());
}
Ripristinare i BLOB 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 uno dei metodi seguenti:
L'esempio di codice seguente mostra come ottenere l'ultima versione di un BLOB eliminato e ripristinarla copiandola sul BLOB di base:
public static void RestoreBlobWithVersioning(
BlobContainerClient container,
BlobClient blob)
{
// List blobs in this container that match prefix
// Include versions in listing
Pageable<BlobItem> blobItems = container.GetBlobs(
BlobTraits.None,
BlobStates.Version,
prefix: blob.Name);
// Get the URI for the most recent version
BlobUriBuilder blobVersionUri = new BlobUriBuilder(blob.Uri)
{
VersionId = blobItems.
OrderByDescending(version => version.VersionId).
ElementAtOrDefault(0)?.VersionId
};
// Restore the most recently generated version by copying it to the base blob
blob.StartCopyFromUri(blobVersionUri.ToUri());
}
Risorse
Per altre informazioni su come eliminare i BLOB e ripristinare i BLOB eliminati usando la libreria client di Archiviazione BLOB di Azure per .NET, vedere le risorse seguenti.
Esempi di codice
Operazioni dell'API REST
Azure SDK per .NET contiene librerie basate sull'API REST di Azure che consentono di interagire con le operazioni dell'API REST tramite paradigmi .NET 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 (NuGet)
Vedi anche
Contenuto correlato
- Questo articolo fa parte della Guida per sviluppatori di Archiviazione BLOB per .NET. Per altre informazioni, vedere l’elenco completo degli articoli della Guida per sviluppatori inCreare la propria app .NET.