Skapa och hantera en blobögonblicksbild med .NET
En ögonblicksbild är en skrivskyddad version av en blob som tas vid en tidpunkt. Den här artikeln visar hur du skapar och hanterar blobögonblicksbilder med hjälp av Azure Storage-klientbiblioteket för .NET.
Mer information om blobögonblicksbilder i Azure Storage finns i Blob-ögonblicksbilder.
Förutsättningar
- Azure-prenumeration – skapa en kostnadsfritt
- Azure Storage-konto – skapa ett lagringskonto
- Senaste .NET SDK för operativsystemet. Se till att hämta SDK:et och inte körningen.
Konfigurera din miljö
Om du inte har ett befintligt projekt visar det här avsnittet hur du konfigurerar ett projekt för att arbeta med Azure Blob Storage-klientbiblioteket för .NET. Stegen omfattar paketinstallation, tillägg av using
direktiv och skapande av ett auktoriserat klientobjekt. Mer information finns i Komma igång med Azure Blob Storage och .NET.
Installera paket
Från projektkatalogen installerar du paket för Azure Blob Storage- och Azure Identity-klientbiblioteken med hjälp av dotnet add package
kommandot . Azure.Identity-paketet behövs för lösenordslösa anslutningar till Azure-tjänster.
dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity
Lägga till using
direktiv
Lägg till dessa using
direktiv överst i kodfilen:
using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
Vissa kodexempel i den här artikeln kan kräva ytterligare using
direktiv.
Skapa ett klientobjekt
Om du vill ansluta en app till Blob Storage skapar du en instans av BlobServiceClient. I följande exempel visas hur du skapar ett klientobjekt med hjälp av DefaultAzureCredential
för auktorisering:
public BlobServiceClient GetBlobServiceClient(string accountName)
{
BlobServiceClient client = new(
new Uri($"https://{accountName}.blob.core.windows.net"),
new DefaultAzureCredential());
return client;
}
Du kan registrera en tjänstklient för beroendeinmatning i en .NET-app.
Du kan också skapa klientobjekt för specifika containrar eller blobar. Mer information om hur du skapar och hanterar klientobjekt finns i Skapa och hantera klientobjekt som interagerar med dataresurser.
Auktorisering
Auktoriseringsmekanismen måste ha de behörigheter som krävs för att fungera med blobögonblicksbilder. För auktorisering med Microsoft Entra-ID (rekommenderas) behöver du den inbyggda rollen Storage Blob Data Contributor eller senare. Mer information finns i auktoriseringsvägledningen för Ögonblicksbildsblob.
Skapa en ögonblicksbild
Om du vill skapa en ögonblicksbild av en blockblob använder du någon av följande metoder:
I följande kodexempel visas hur du skapar en ögonblicksbild. Inkludera en referens till Azure.Identity-biblioteket för att använda dina Microsoft Entra-autentiseringsuppgifter för att auktorisera begäranden till tjänsten. Mer information om hur du använder klassen DefaultAzureCredential för att auktorisera en hanterad identitet för åtkomst till Azure Storage finns i Azure Identity-klientbiblioteket för .NET.
private static async Task CreateBlockBlobSnapshot(
string accountName,
string containerName,
string blobName,
Stream data)
{
const string blobServiceEndpointSuffix = ".blob.core.windows.net";
Uri containerUri =
new Uri("https://" + accountName + blobServiceEndpointSuffix + "/" + containerName);
// Get a container client object and create the container.
BlobContainerClient containerClient = new BlobContainerClient(containerUri,
new DefaultAzureCredential());
await containerClient.CreateIfNotExistsAsync();
// Get a blob client object.
BlobClient blobClient = containerClient.GetBlobClient(blobName);
try
{
// Upload text to create a block blob.
await blobClient.UploadAsync(data);
// Add blob metadata.
IDictionary<string, string> metadata = new Dictionary<string, string>
{
{ "ApproxBlobCreatedDate", DateTime.UtcNow.ToString() },
{ "FileType", "text" }
};
await blobClient.SetMetadataAsync(metadata);
// Sleep 5 seconds.
System.Threading.Thread.Sleep(5000);
// Create a snapshot of the base blob.
// You can specify metadata at the time that the snapshot is created.
// If no metadata is specified, then the blob's metadata is copied to the snapshot.
await blobClient.CreateSnapshotAsync();
}
catch (RequestFailedException e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
throw;
}
}
Ta bort ögonblicksbilder
Om du vill ta bort en blob måste du först ta bort alla ögonblicksbilder av den bloben. Du kan ta bort en ögonblicksbild individuellt eller ange att alla ögonblicksbilder ska tas bort när källbloben tas bort. Om du försöker ta bort en blob som fortfarande har ögonblicksbilder resulterar ett fel.
Om du vill ta bort en blob och dess ögonblicksbilder använder du någon av följande metoder och inkluderar uppräkningen DeleteSnapshotsOption :
I följande kodexempel visas hur du tar bort en blob och dess ögonblicksbilder i .NET, där blobClient
är ett objekt av typen BlobClient:
await blobClient.DeleteIfExistsAsync(DeleteSnapshotsOption.IncludeSnapshots, null, default);
Kopiera en blobögonblicksbild över basbloben
Du kan utföra en kopieringsåtgärd för att höja upp en ögonblicksbild över dess basblob, så länge basbloben är på en onlinenivå (frekvent eller lågfrekvent). Ögonblicksbilden finns kvar, men målet skrivs över med en kopia som kan läsas och skrivas till.
Följande kodexempel visar hur du kopierar en blobögonblicksbild över basbloben:
public static async Task<BlockBlobClient> CopySnapshotOverBaseBlobAsync(
BlockBlobClient client,
string snapshotTimestamp)
{
// Instantiate BlockBlobClient with identical URI and add snapshot timestamp
BlockBlobClient snapshotClient = client.WithSnapshot(snapshotTimestamp);
// Restore the specified snapshot by copying it over the base blob
await client.SyncUploadFromUriAsync(snapshotClient.Uri, overwrite: true);
// Return the client object after the copy operation
return client;
}
Resurser
Mer information om hur du hanterar blobögonblicksbilder med hjälp av Azure Blob Storage-klientbiblioteket för .NET finns i följande resurser.
Relaterade kodexempel med inaktuella .NET version 11.x SDK:er finns i Kodexempel med .NET version 11.x.