Händelser
31 mars 23 - 2 apr. 23
Den största utbildningshändelsen för Infrastruktur, Power BI och SQL. 31 mars – 2 april. Använd koden FABINSIDER för att spara 400 USD.
Anmäl dig i dagDen här webbläsaren stöds inte längre.
Uppgradera till Microsoft Edge och dra nytta av de senaste funktionerna och säkerhetsuppdateringarna, samt teknisk support.
Azure Storage Data Movement-biblioteket är ett plattformsoberoende öppen källkod bibliotek som är utformat för uppladdning, nedladdning och kopiering av blobar och filer med höga prestanda. Data movement-biblioteket innehåller praktiska metoder som inte är tillgängliga i Azure Storage-klientbiblioteket för .NET. Med de här metoderna kan du ange antalet parallella åtgärder, spåra överföringsframsteg, återuppta en avbruten överföring med mera.
Dataförflyttningsbiblioteket är endast tillgängligt för .NET och stöder endast Azure Blob Storage och Azure Files. Du bör överväga dessa begränsningar och andra kända problem när du bestämmer dig för om du vill använda dataflyttbiblioteket.
Om du migrerar kod från det äldre Microsoft.Azure.Storage.DataMovement-biblioteket (version 2.X.X) till det aktuella Azure.Storage.DataMovement-biblioteket (version 12.X.X) läser du migreringsguiden.
API-referensdokument Källkodspaket | | (NuGet) | Exempel: Blobar / Files.Shares
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.
Från projektkatalogen installerar du paket för Azure Storage Data Movement-klientbiblioteket och Azure Identity-klientbiblioteket 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.DataMovement
dotnet add package Azure.Storage.DataMovement.Blobs
dotnet add package Azure.Identity
Om du vill arbeta med tilläggsbiblioteket för Azure Files installerar du paketet Azure.Storage.DataMovement.Files.Shares :
dotnet add package Azure.Storage.DataMovement.Files.Shares
Om du vill köra kodexemplen i den här artikeln lägger du till följande using
direktiv:
using Azure;
using Azure.Core;
using Azure.Identity;
using Azure.Storage.DataMovement;
using Azure.Storage.DataMovement.Blobs;
Om du använder tilläggsbiblioteket för Azure Files lägger du till följande using
direktiv:
using Azure.Storage.DataMovement.Files.Shares;
Auktoriseringsmekanismen måste ha de behörigheter som krävs för att utföra uppladdnings-, nedladdnings- eller kopieringsåtgärder. För auktorisering med Microsoft Entra-ID (rekommenderas) behöver du den inbyggda rollen Storage Blob Data Contributor eller senare.
Azure Storage Data Movement-biblioteket består av ett gemensamt klientbibliotek och tilläggsbibliotek för Azure Blob Storage och Azure Files. Det gemensamma biblioteket tillhandahåller kärnfunktionerna för överföring av data, medan tilläggsbiblioteken tillhandahåller funktioner som är specifika för Blob Storage och Azure Files. Mer information finns i följande resurser:
TransferManager är huvudklassen för att starta och kontrollera alla typer av överföringar, inklusive uppladdning, nedladdning och kopiering. I det här avsnittet får du lära dig hur du skapar ett TransferManager
objekt som fungerar med ett lokalt filsystem, Blob Storage eller Azure Files.
Anteckning
Bästa praxis för Azure SDK-klienthantering är att behandla en klient som en singleton, vilket innebär att en klass bara har ett objekt i taget. Du behöver inte behålla mer än en instans av en klient för en viss uppsättning konstruktorparametrar eller klientalternativ.
Följande kod visar hur du skapar ett TransferManager
objekt:
TransferManager transferManager = new(new TransferManagerOptions());
Du kan också ange en instans av TransferManagerOptions för konstruktorn, som tillämpar vissa konfigurationsalternativ på alla överföringar som startas av TransferManager
objektet. Följande konfigurationsalternativ är tillgängliga:
StopOnAnyFailure
.
StorageResource är basklassen för alla lagringsresurser, inklusive blobar och filer. Om du vill skapa ett StorageResource
objekt använder du någon av följande providerklasser:
StorageResource
instanser för en blobcontainer, blockblob, tilläggsblob eller sidblob.StorageResource
instanser för en fil eller katalog.StorageResource
instanser för ett lokalt filsystem.Följande kod visar hur du skapar ett StorageResource
objekt för blobcontainrar och blobar med hjälp av en Uri
:
// Create a token credential
TokenCredential tokenCredential = new DefaultAzureCredential();
BlobsStorageResourceProvider blobsProvider = new(tokenCredential);
// Get a container resource
StorageResource container = await blobsProvider.FromContainerAsync(
new Uri("http://<storage-account-name>.blob.core.windows.net/sample-container"));
// Get a block blob resource - default is block blob
StorageResource blockBlob = await blobsProvider.FromBlobAsync(
new Uri("http://<storage-account-name>.blob.core.windows.net/sample-container/sample-block-blob"),
new BlockBlobStorageResourceOptions());
// Use a similar approach to get a page blob or append blob resource
Du kan också skapa ett StorageResource
objekt med hjälp av ett klientobjekt från Azure.Storage.Blobs.
// Create a token credential
TokenCredential tokenCredential = new DefaultAzureCredential();
BlobContainerClient blobContainerClient = new(
new Uri("https://<storage-account-name>.blob.core.windows.net/sample-container"),
tokenCredential);
StorageResource containerResource = BlobsStorageResourceProvider.FromClient(blobContainerClient);
BlockBlobClient blockBlobClient = blobContainerClient.GetBlockBlobClient("sample-block-blob");
StorageResource blockBlobResource = BlobsStorageResourceProvider.FromClient(blockBlobClient);
// Use a similar approach to get a page blob or append blob resource
Alla överföringar måste ange en källa och ett mål. Både källan och målet är typ StorageResource
, som kan vara antingen StorageResourceContainer
eller StorageResourceItem
. För en viss överföring måste källan och målet vara av samma slag. Om källan till exempel är en blobcontainer måste målet vara en blobcontainer.
Du kan starta en ny överföring genom att anropa följande metod:
Den här metoden returnerar ett TransferOperation-objekt som representerar överföringen. Du kan använda TransferOperation
objektet för att övervaka överföringsstatusen eller hämta överförings-ID:t. Överförings-ID:t är en unik identifierare för överföringen som behövs för att återuppta en överföring eller pausa en överföring.
Du kan också ange en instans av TransferOptions till StartTransferAsync
eller ResumeTransferAsync
, som tillämpar vissa konfigurationsalternativ på en viss överföring. Följande konfigurationsalternativ är tillgängliga:
FailIfExists
när du startar en ny överföring. När du återupptar en överföring kan standardinställningarna variera. För alla resurser som har räknats upp när överföringen startade är CreationMode
standardvärdet det ursprungliga värde som används. För eventuella återstående resurser gäller det vanliga standardvärdet.Följande kodexempel visar hur du startar en ny överföring för att ladda upp en lokal katalog till en blobcontainer:
// Create a token credential
TokenCredential tokenCredential = new DefaultAzureCredential();
TransferManager transferManager = new(new TransferManagerOptions());
BlobsStorageResourceProvider blobsProvider = new(tokenCredential);
string localDirectoryPath = "C:/path/to/directory";
Uri blobContainerUri = new Uri("https://<storage-account-name>.blob.core.windows.net/sample-container");
TransferOperation transferOperation = await transferManager.StartTransferAsync(
sourceResource: LocalFilesStorageResourceProvider.FromDirectory(localDirectoryPath),
destinationResource: await blobsProvider.FromContainerAsync(blobContainerUri));
await transferOperation.WaitForCompletionAsync();
Du kan använda dataflyttbiblioteket för att kopiera mellan två StorageResource
instanser. För blobresurser använder överföringen åtgärden Put Blob From URL ,som utför en server-till-server-kopia.
Följande kodexempel visar hur du startar en ny överföring för att kopiera alla blobar i en källblobcontainer till en målblobcontainer. Målcontainern måste redan finnas. I det här exemplet anger vi CreationMode till för OverwriteIfExists
att skriva över alla målblobar som redan finns. Du kan justera CreationMode
egenskapen baserat på appens behov.
Uri sourceContainerUri = new Uri("https://<storage-account-name>.blob.core.windows.net/source-container");
Uri destinationContainerUri = new Uri("https://<storage-account-name>.blob.core.windows.net/dest-container");
TransferOperation transferOperation = await transferManager.StartTransferAsync(
sourceResource: await blobsProvider.FromContainerAsync(
sourceContainerUri,
new BlobStorageResourceContainerOptions()
{
BlobPrefix = "source/directory/prefix"
}),
destinationResource: await blobsProvider.FromContainerAsync(
destinationContainerUri,
new BlobStorageResourceContainerOptions()
{
// All source blobs are copied as a single type of destination blob
// Defaults to block blob, if not specified
BlobType = BlobType.Block,
BlobPrefix = "destination/directory/prefix"
}),
transferOptions: new TransferOptions()
{
CreationMode = StorageResourceCreationMode.OverwriteIfExists,
}
);
await transferOperation.WaitForCompletionAsync();
I följande kodexempel visas hur du startar en ny överföring för att kopiera en källblob till en målblob. I det här exemplet anger vi CreationMode till för OverwriteIfExists
att skriva över målbloben om den redan finns. Du kan justera CreationMode
egenskapen baserat på appens behov.
Uri sourceBlobUri = new Uri(
"https://<storage-account-name>.blob.core.windows.net/source-container/source-blob");
Uri destinationBlobUri = new Uri(
"https://<storage-account-name>.blob.core.windows.net/dest-container/dest-blob");
TransferOperation transferOperation = await transferManager.StartTransferAsync(
sourceResource: await blobsProvider.FromBlobAsync(sourceBlobUri),
destinationResource: await blobsProvider.FromBlobAsync(destinationBlobUri, new BlockBlobStorageResourceOptions()),
transferOptions: new TransferOptions()
{
CreationMode = StorageResourceCreationMode.OverwriteIfExists,
}
);
await transferOperation.WaitForCompletionAsync();
Genom att spara överföringsförloppet till disken kan du med Data Movement-biblioteket återuppta en överföring som misslyckades före slutförandet, eller som på annat sätt avbröts eller pausades. För att återuppta en överföring TransferManager
måste objektet konfigureras med StorageResourceProvider
instanser som kan sätta ihop överföringen från de bevarade data igen. Du kan använda ProvidersForResuming
egenskapen för klassen TransferManagerOptions för att ange providern.
I följande kodexempel visas hur du initierar ett TransferManager
objekt som kan återuppta en överföring mellan det lokala filsystemet och Blob Storage:
// Create a token credential
TokenCredential tokenCredential = new DefaultAzureCredential();
TransferManager transferManager = new(new TransferManagerOptions()
{
ProvidersForResuming = new List<StorageResourceProvider>()
{
new BlobsStorageResourceProvider(tokenCredential)
}
});
Om du vill återuppta en överföring anropar du följande metod:
Ange överförings-ID för den överföring som du vill återuppta. Överförings-ID:t är en unik identifierare för överföringen som returneras som en del av TransferOperation
objektet när överföringen startas. Om du inte känner till överförings-ID-värdet kan du anropa TransferManager.GetTransfersAsync för att hitta överföringen och dess motsvarande ID.
Följande kodexempel visar hur du återupptar en överföring:
TransferOperation resumedTransfer = await transferManager.ResumeTransferAsync(transferId: ID);
Anteckning
Platsen för de bevarade överföringsdata skiljer sig från standardplatsen om TransferCheckpointStoreOptions anges som en del av TransferManagerOptions
. Om du vill återuppta överföringar som registrerats med ett anpassat kontrollpunktsarkiv måste du ange samma alternativ för kontrollpunktsarkivet för objektet TransferManager
som återupptar överföringen.
Överföringar kan övervakas och observeras via flera mekanismer, beroende på appens behov. I det här avsnittet får du lära dig hur du övervakar överföringsframstatus med TransferOperation
hjälp av objektet och hur du övervakar en överföring med hjälp av TransferOptions
händelser.
Du kan övervaka överföringsstatusen med hjälp av objektet TransferOperation
som returneras av StartTransferAsync
metoden. Du kan också anropa TransferManager.GetTransfersAsync för att räkna upp alla överföringar för ett TransferManager
objekt.
I följande kodexempel visas hur du itererar över alla överföringar och skriver tillståndet för varje överföring till en loggfil:
async Task CheckTransfersAsync(TransferManager transferManager)
{
await foreach (TransferOperation transfer in transferManager.GetTransfersAsync())
{
using StreamWriter logStream = File.AppendText("path/to/log/file");
logStream.WriteLine(Enum.GetName(typeof(TransferState), transfer.Status.State));
}
}
TransferStatus definierar status för överföringsjobbet.
TransferStatus
innehåller följande egenskaper:
Property | Type | Beskrivning |
---|---|---|
HasCompletedSuccessfully |
Booleskt | Representerar om överföringen slutförs utan fel eller överhoppade objekt. |
HasFailedItems |
Booleskt | Representerar om överföringen har några felobjekt. Om värdet är true har överföringen minst ett felobjekt. Om värdet är false har överföringen för närvarande inga fel. |
HasSkippedItems |
Booleskt | Representerar om överföringen har några överhoppade objekt. Om värdet är true har överföringen minst ett överhoppat objekt. Om värdet är false har överföringen för närvarande inga överhoppade objekt. Det går att aldrig hoppas över några objekt om SkipIfExists de inte är aktiverade i TransferOptions.CreationMode. |
State |
TransferState | Definierar vilka typer av tillstånd en överföring kan ha. Mer information finns i TransferState . |
Du kan övervaka överföringsförloppet genom att lyssna efter händelser som tillhandahålls av klassen TransferOptions . Instansen TransferOptions
StartTransferAsync
skickas till metoden och tillhandahåller händelser som utlöses när en överföring slutförs, misslyckas, hoppas över eller ändrar status.
Följande kodexempel visar hur du lyssnar efter en överföringshändelse med hjälp av TransferOptions
:
async Task<TransferOperation> ListenToTransfersAsync(
TransferManager transferManager,
StorageResource source,
StorageResource destination)
{
TransferOptions transferOptions = new();
transferOptions.ItemTransferCompleted += (TransferItemCompletedEventArgs args) =>
{
using (StreamWriter logStream = File.AppendText("path/to/log/file"))
{
logStream.WriteLine($"File Completed Transfer: {args.Source.Uri.AbsoluteUri}");
}
return Task.CompletedTask;
};
return await transferManager.StartTransferAsync(
source,
destination,
transferOptions);
}
För program med befintlig kod som använder BlobContainerClient
klassen från Azure.Storage.Blobs kan du använda tilläggsmetoder för att starta överföringar direkt från ett BlobContainerClient
objekt. Tilläggsmetoderna finns i klassen BlobContainerClientExtensions (eller ShareDirectoryClientExtensions för Azure Files) och ger några av fördelarna med att använda TransferManager
med minimala kodändringar. I det här avsnittet får du lära dig hur du använder tilläggsmetoderna för att utföra överföringar från ett BlobContainerClient
objekt.
Installera Azure.Storage.Blobs-paketet om du inte redan har det:
dotnet add package Azure.Storage.Blobs
Lägg till följande using
direktiv överst i kodfilen:
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
I följande kodexempel visas hur du instansierar en BlobContainerClient
för en blobcontainer med namnet sample-container
:
// Create a token credential
TokenCredential tokenCredential = new DefaultAzureCredential();
BlobServiceClient client = new BlobServiceClient(
new Uri("https://<storage-account-name>.blob.core.windows.net"),
tokenCredential);
BlobContainerClient containerClient = client.GetBlobContainerClient("sample-container");
Följande kodexempel visar hur du laddar upp lokalt kataloginnehåll till sample-container
med hjälp av UploadDirectoryAsync
:
TransferOperation transfer = await containerClient
.UploadDirectoryAsync(WaitUntil.Started, "local/directory/path");
await transfer.WaitForCompletionAsync();
Följande kodexempel visar hur du laddar ned innehållet i till en lokal katalog med hjälp av sample-container
DownloadToDirectoryAsync
:
TransferOperation transfer = await containerClient
.DownloadToDirectoryAsync(WaitUntil.Started, "local/directory/path");
await transfer.WaitForCompletionAsync();
Mer information om tilläggsmetoderna för BlobContainerClient
finns i Tillägg på BlobContainerClient.
Händelser
31 mars 23 - 2 apr. 23
Den största utbildningshändelsen för Infrastruktur, Power BI och SQL. 31 mars – 2 april. Använd koden FABINSIDER för att spara 400 USD.
Anmäl dig i dagUtbildning
Modul
Arbeta med Azure Blob Storage - Training
Lär dig hur du använder Azure Blob Storage-klientbiblioteket för att skapa och uppdatera Blob Storage-resurser.
Dokumentation
Namnge och referera till containrar, blobar och metadata – Azure Storage
I det här avsnittet beskrivs namngivning och hänvisning till containrar, blobar, metadata och ögonblicksbilder. Ett lagringskonto kan innehålla noll eller fler containrar. En container innehåller egenskaper, metadata och noll eller fler blobar. En blob är en enskild entitet som består av binära data, egenskaper och metadata.
Kopiera blob (REST API) – Azure Storage
Åtgärden Kopiera blob kopierar en blob till ett mål i lagringskontot.
Ta bort blob (REST API) – Azure Storage
Åtgärden Ta bort blob tar bort den angivna bloben eller ögonblicksbilden.