Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Depolama Veri Taşıma kitaplığı, blobların ve dosyaların yüksek performanslı karşıya yüklenmesi, indirilmesi ve kopyalanması için tasarlanmış bir platformlar arası açık kaynak kitaplığıdır. Veri Taşıma kitaplığı, .NET için Azure Depolama istemci kitaplığında bulunmayan kullanışlı yöntemler sağlar. Bu yöntemler paralel işlemlerin sayısını ayarlamanıza, aktarım ilerlemesini izlemenize, iptal edilen aktarımı sürdürmenize ve daha fazlasını yapmanızı sağlar.
Veri Taşıma kitaplığı yalnızca .NET için kullanılabilir ve yalnızca Azure Blob Depolama ve Azure Dosyalar destekler. Veri Taşıma kitaplığını kullanıp kullanmayacağınız konusunda karar verirken bu sınırlamaları ve bilinen diğer sorunları göz önünde bulundurmanız gerekir.
Kodu eski Microsoft.Azure.Storage.DataMovement kitaplığından (sürüm 2.X.X) geçerli Azure.Storage.DataMovement kitaplığına (sürüm 12.X.X) geçiriyorsanız Geçiş kılavuzuna bakın.
API başvuru belgeleri | Kaynak kodu | Paket (NuGet) | Örnekler: Bloblar / Files.Shares
Önkoşullar
- Azure aboneliği - ücretsiz bir abonelik oluşturun
- Azure depolama hesabı - depolama hesabı oluşturma
- İşletim sisteminiz için en son .NET SDK'sı . Çalışma zamanını değil SDK'yi aldığınızdan emin olun.
Ortamınızı ayarlama
Var olan bir projeniz yoksa, bu bölümde bir projenin .NET için Azure Blob Depolama istemci kitaplığıyla çalışacak şekilde nasıl ayarlanacağı gösterilir. Adımlar arasında paket yükleme, yönergeler ekleme using
ve yetkili istemci nesnesi oluşturma yer alır.
Paketleri yükleme
Proje dizininizden komutunu kullanarak Azure Depolama Veri Taşıma istemci kitaplığına ve Azure Identity istemci kitaplığına yönelik dotnet add package
paketleri yükleyin.
Azure hizmetlerine parolasız bağlantılar için Azure.Identity paketi gereklidir.
dotnet add package Azure.Storage.DataMovement
dotnet add package Azure.Storage.DataMovement.Blobs
dotnet add package Azure.Identity
Azure Dosyalar uzantı kitaplığıyla çalışmak için Azure.Storage.DataMovement.Files.Shares paketini yükleyin:
dotnet add package Azure.Storage.DataMovement.Files.Shares
"using
Yönergeleri Ekle"
Bu makaledeki kod örneklerini çalıştırmak için aşağıdaki using
yönergeleri ekleyin:
using Azure;
using Azure.Core;
using Azure.Identity;
using Azure.Storage.DataMovement;
using Azure.Storage.DataMovement.Blobs;
Azure Dosyalar için uzantı kitaplığını kullanıyorsanız aşağıdaki using
yönergeyi ekleyin:
using Azure.Storage.DataMovement.Files.Shares;
Yetkilendirme
Yetkilendirme mekanizması, karşıya yükleme, indirme veya kopyalama işlemlerini gerçekleştirmek için gerekli izinlere sahip olmalıdır. Microsoft Entra Id ile yetkilendirme için (önerilir), Azure RBAC yerleşik rolü Depolama Blob Verileri Katkıda Bulunanı veya üzeri gerekir.
Veri Taşıma kitaplığı hakkında
Azure Depolama Veri Taşıma kitaplığı ortak bir istemci kitaplığı ile Azure Blob Depolama ve Azure Dosyalar için uzantı kitaplıklarından oluşur. Ortak kitaplık veri aktarımı için temel işlevselliği sağlarken, uzantı kitaplıkları Blob Depolama ve Azure Dosyalar özgü işlevler sağlar. Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:
TransferManager
Nesne oluşturma
TransferManager , karşıya yükleme, indirme ve kopyalama dahil olmak üzere tüm aktarım türlerini başlatmak ve denetlemek için ana sınıftır. Bu bölümde, yerel bir TransferManager
dosya sistemi, Blob Depolama veya Azure Dosyalar ile çalışacak bir nesne oluşturmayı öğreneceksiniz.
Not
Azure SDK istemci yönetimi için en iyi yöntem, bir istemciyi tekil olarak ele almaktır; bu da bir sınıfın aynı anda yalnızca bir nesnesi olduğu anlamına gelir. Belirli bir oluşturucu parametreleri veya istemci seçenekleri kümesi için bir istemcinin birden fazla örneğini tutmanız gerekmez.
Aşağıdaki kodda bir TransferManager
nesnenin nasıl oluşturulacağı gösterilmektedir:
TransferManager transferManager = new(new TransferManagerOptions());
İsteğe bağlı olarak oluşturucuya bir TransferManagerOptions örneği sağlayabilirsiniz. Bu örnek, nesne tarafından TransferManager
başlatılan tüm aktarımlara belirli yapılandırma seçeneklerini uygular. Aşağıdaki yapılandırma seçenekleri kullanılabilir:
- CheckpointStoreOptions: İsteğe bağlı. Aktarımların sürdürülebilmesi için aktarım durumunu kaydetmek için kullanılan bir denetim noktası oluşturma seçeneklerini tanımlar.
- Tanılama: Aktarım yöneticisi tanılama seçeneklerini alır.
-
ErrorHandling: İsteğe bağlı. Aktarım sırasında hataların nasıl işleneceğini tanımlar. Varsayılan
StopOnAnyFailure
değeridir. - MaximumConcurrency: Paralel aktarımda kullanılabilecek en fazla çalışan sayısı.
- ProvidersForResuming: Aktarım yöneticisinin aktarıma devam etmede kullanması için kaynak sağlayıcıları. Kullanımda olan her bir depolama sağlayıcısı için bir sağlayıcı bekler. Daha fazla bilgi edinmek için bkz Mevcut bir aktarımı sürdürme.
StorageResource
Nesne oluşturma
StorageResource , bloblar ve dosyalar dahil olmak üzere tüm depolama kaynakları için temel sınıftır. Nesne StorageResource
oluşturmak için aşağıdaki sağlayıcı sınıflarından birini kullanın:
-
BlobsStorageResourceProvider: Blob kapsayıcısı, blok blobu, ekleme blobu veya sayfa blobu örnekleri oluşturmak
StorageResource
için bu sınıfı kullanın. -
ShareFilesStorageResourceProvider: Bir dosya veya dizin için örnekler oluşturmak
StorageResource
için bu sınıfı kullanın. -
LocalFilesStorageResourceProvider: Yerel bir dosya sistemi için örnekler oluşturmak
StorageResource
için bu sınıfı kullanın.
StorageResource
Blob Depolama için nesne oluşturma
Aşağıdaki kod, Uri
kullanarak StorageResource
blob kapsayıcıları ve bloblar için bir nesnenin nasıl oluşturulacağını gösterir.
// 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
Azure.Storage.Blobs'tan StorageResource
bir istemci nesnesi kullanarak da nesne oluşturabilirsiniz.
// 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
Yeni bir aktarım başlat
Tüm aktarımların bir kaynak ve hedef belirtmesi gerekir. Hem kaynak hem de hedef tür StorageResource
olabilir ve bu türler StorageResourceContainer
veya StorageResourceItem
olabilir. Belirli bir aktarım için kaynak ve hedef aynı türde olmalıdır. Örneğin, kaynak bir blob kapsayıcısıysa hedef bir blob kapsayıcısı olmalıdır.
Aşağıdaki yöntemi çağırarak yeni bir aktarım başlatabilirsiniz:
Bu yöntem, aktarımı temsil eden bir TransferOperation nesnesi döndürür. Aktarım ilerleme durumunu izlemek veya aktarım kimliğini almak için TransferOperation
nesnesini kullanabilirsiniz. Aktarım kimliği, aktarımı sürdürmek veya aktarımı duraklatmak için gereken aktarım için benzersiz bir tanımlayıcıdır.
İsteğe bağlı olarak, StartTransferAsync
veya ResumeTransferAsync
öğesine belirli aktarıma ilişkin yapılandırma seçeneklerini uygulamak için bir TransferOptions örneği sağlayabilirsiniz. Aşağıdaki yapılandırma seçenekleri kullanılabilir:
-
CreationMode: Aktarım zaten var olan bir kaynakla karşılaştığında davranışı yapılandırır. Yeni bir aktarım başlatıldığında varsayılan olarak
FailIfExists
seçilir. Bir aktarımı sürdürürken varsayılan değerler farklılık gösterebilir. Aktarım başlatıldığında başarıyla numaralandırılan tüm kaynaklar için varsayılanCreationMode
olarak kullanılan ilk değer kullanılır. Kalan tüm kaynaklar için normal varsayılan değer uygulanır. - InitialTransferSize: bayt cinsinden ilk aralık isteğinin boyutu. Bu sınırdan daha küçük tekli aktarım boyutları, tek bir istekle yüklenir veya indirilir. Bu sınırdan büyük aktarımlar, MaximumTransferChunkSize boyutunda öbekler halinde indirilme veya karşıya yüklenmeye devam eder. Varsayılan değer 32 MiB'dir. Bir aktarımı sürdürürken, varsayılan değer aktarım ilk başlatıldığında belirtilen değerdir.
- MaximumTransferChunkSize: Öbekler halinde veri aktarırken her öbek için kullanılacak en büyük boyut. Varsayılan değer 4 MiB'dir. Bir aktarımı sürdürürken, varsayılan değer aktarım ilk başlatıldığında belirtilen değerdir.
- ProgressHandlerOptions: İsteğe bağlı. ProgressHandler'ın davranışını değiştirme seçenekleri.
Örnek: Blob kapsayıcısına yerel dizin yükleme
Aşağıdaki kod örneği, yerel dizini blob kapsayıcısına yüklemek için yeni bir aktarımın nasıl başlatılacığını gösterir:
// 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();
Örnek: Kapsayıcı veya blob kopyala
İki StorageResource
örnek arasında kopyalamak için Veri Taşıma kitaplığını kullanabilirsiniz. Blob kaynakları için aktarım, sunucudan sunucuya kopyalama gerçekleştiren URL'den Blob Yerleştir işlemini kullanır.
Aşağıdaki kod örneği, bir kaynak blob kapsayıcısında yer alan tüm blobları hedef blob kapsayıcısına kopyalamak için yeni bir aktarım başlatmayı gösterir. Hedef kapsayıcının zaten mevcut olması gerekir. Bu örnekte, CreationMode'ıOverwriteIfExists
. Özelliği uygulamanızın CreationMode
gereksinimlerine göre ayarlayabilirsiniz.
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();
Aşağıdaki kod örneğinde, bir kaynak blobu hedef bloba kopyalamak için yeni bir aktarımın nasıl başlat başlayacağı gösterilmektedir. Bu örnekte, CreationMode'u OverwriteIfExists
mevcutsa hedef blobun üzerine yazacak şekilde ayarladık. Özelliği uygulamanızın CreationMode
gereksinimlerine göre ayarlayabilirsiniz.
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();
Mevcut aktarımı sürdür
Aktarım ilerleme durumunu diske kalıcı hale getiren Veri Taşıma kitaplığı, tamamlanmadan önce başarısız olan veya başka bir şekilde iptal edilmiş veya duraklatılmış bir aktarımı sürdürmenize olanak tanır. Aktarımı sürdürmek için, nesnenin TransferManager
kalıcı verilerden aktarımı yeniden birleştirebilen örneklerle StorageResourceProvider
yapılandırılması gerekir. Sağlayıcıları belirtmek için TransferManagerOptionsProvidersForResuming
kullanabilirsiniz.
Aşağıdaki kod örneği, yerel dosya sistemi ile Blob Depolama arasında aktarımı devam ettirebilen bir nesnenin nasıl başlatıldığını TransferManager
gösterir:
// Create a token credential
TokenCredential tokenCredential = new DefaultAzureCredential();
TransferManager transferManager = new(new TransferManagerOptions()
{
ProvidersForResuming = new List<StorageResourceProvider>()
{
new BlobsStorageResourceProvider(tokenCredential)
}
});
Aktarımı sürdürmek için aşağıdaki yöntemi çağırın:
Sürdürmek istediğiniz aktarımın aktarım kimliğini belirtin. Aktarım kimliği, aktarım başlatıldığında nesnenin TransferOperation
bir parçası olarak döndürülen aktarım için benzersiz bir tanımlayıcıdır. Aktarım kimliği değerini bilmiyorsanız aktarımı ve karşılık gelen kimliğini bulmak için TransferManager.GetTransfersAsync'i çağırabilirsiniz.
Aşağıdaki kod örneğinde aktarımın nasıl sürdürülür olduğu gösterilmektedir:
TransferOperation resumedTransfer = await transferManager.ResumeTransferAsync(transferId: ID);
Not
TransferCheckpointStoreOptions öğesinin bir parçası olarak ayarlandıysa, kalıcı aktarım verilerinin konumu varsayılan konumdan TransferManagerOptions
farklıdır. Özel denetim noktası deposuyla kaydedilen aktarımları sürdürmek için, aktarımı sürdüren nesne için TransferManager
aynı denetim noktası deposu seçeneklerini sağlamanız gerekir.
Aktarım ilerlemesini izleme
Aktarımlar, uygulamanızın gereksinimlerine bağlı olarak çeşitli mekanizmalar aracılığıyla izlenebilir ve gözlemlenebilir. Bu bölümde, nesnesini kullanarak aktarım ilerlemesini TransferOperation
izlemeyi ve olayları kullanarak TransferOptions
aktarımı izlemeyi öğreneceksiniz.
Örnek: Nesnesini kullanarak aktarım ilerleme durumunu TransferOperation
izleme
TransferOperation
nesnesi tarafından döndürülen StartTransferAsync
yöntemini kullanarak aktarım ilerlemesini izleyebilirsiniz. Ayrıca, bir nesnenin tüm aktarımlarını listelemek için TransferManager.GetTransfersAsyncTransferManager
.
Aşağıdaki kod örneği, tüm aktarımları yinelemeyi ve her aktarımın durumunu bir günlük dosyasına yazmayı gösterir:
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 , aktarım işinin durumunu tanımlar.
TransferStatus
aşağıdaki özellikleri içerir:
Mülkiyet | Türü | Açıklama |
---|---|---|
HasCompletedSuccessfully |
Boolean | Aktarım işleminin herhangi bir hata veya atlanan öğe olmadan başarıyla tamamlanmasını temsil eder. |
HasFailedItems |
Boolean | Aktarımda herhangi bir hata öğesi olup olmadığını temsil eder. olarak ayarlanırsa true aktarımda en az bir hata öğesi vardır. olarak false ayarlanırsa aktarımda şu anda hiçbir hata yoktur. |
HasSkippedItems |
Boolean | Aktarımda atlanan öğe olup olmadığını temsil eder.
true olarak ayarlanırsa, aktarımda en az bir atlanmış öğe vardır.
false olarak ayarlandığında, aktarımda atlanmış öğe yoktur.
TransferOptions.CreationMode içinde SkipIfExists etkinleştirilmediğinde, hiçbir öğenin atlanmaması mümkündür. |
State |
TransferState | Aktarımın sahip olabileceği hâl türlerini tanımlar. Ayrıntılar için bkz . TransferState . |
Örnek: TransferOptions
olaylarını kullanarak veri aktarım ilerlemesini izleme
TransferOptions sınıfı tarafından sağlanan olayları dinleyerek aktarım ilerleme durumunu izleyebilirsiniz. Örneği TransferOptions
yöntemine StartTransferAsync
geçirilir ve aktarım tamamlandığında, başarısız olduğunda, atlandığında veya durumu değiştirdiğinde tetiklenen olaylar sağlar.
Aşağıdaki kod örneği, TransferOptions
kullanarak aktarım tamamlama olayını nasıl dinleyeceğinizi göstermektedir.
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);
}
için uzantı yöntemlerini kullanma BlobContainerClient
Azure.Storage.BlobsBlobContainerClient
kullanan mevcut koda sahip uygulamalar için, doğrudan bir BlobContainerClient
nesneden aktarımları başlatmak için uzantı yöntemlerini kullanabilirsiniz. Uzantı yöntemleri BlobContainerClientExtensions sınıfında (veya Azure Dosyalar için ShareDirectoryClientExtensions) sağlanır ve en az kod değişikliğiyle kullanmanın TransferManager
avantajlarından bazılarını sağlar. Bu bölümde, bir BlobContainerClient
nesneden aktarımları gerçekleştirmek için uzantı yöntemlerini kullanmayı öğreneceksiniz.
Henüz sahip değilseniz Azure.Storage.Blobs paketini yükleyin:
dotnet add package Azure.Storage.Blobs
Aşağıdaki using
yönergeleri kod dosyanızın en üstüne ekleyin:
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
Bir sample-container
adlı blob kapsayıcısı için BlobContainerClient
örneğini nasıl oluşturacağınızı gösteren aşağıdaki kod örneği:
// 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");
Aşağıdaki kod örneği, sample-container
kullanarak yerel dizin içeriğinin UploadDirectoryAsync
'e nasıl yükleneceğini göstermektedir.
TransferOperation transfer = await containerClient
.UploadDirectoryAsync(WaitUntil.Started, "local/directory/path");
await transfer.WaitForCompletionAsync();
Aşağıdaki kod örneğinde, DownloadToDirectoryAsync
kullanılarak sample-container
içeriğinin yerel bir dizine nasıl indirileceği gösterilmektedir.
TransferOperation transfer = await containerClient
.DownloadToDirectoryAsync(WaitUntil.Started, "local/directory/path");
await transfer.WaitForCompletionAsync();
BlobContainerClient
uzantı yöntemleri hakkında daha fazla bilgi edinmek için, BlobContainerClient üzerindeki Uzantılar'a bakın.
Sonraki adım
- DataMovement.Blobs ve DataMovement.Files.Shares için kod örnekleri .NET github için Azure SDK deposunda kullanılabilir.