Przenoszenie danych za pomocą biblioteki przenoszenia danych

Uwaga

Ten artykuł zawiera wskazówki dotyczące pracy z wersją 2.0.XX biblioteki przenoszenia danych usługi Azure Storage. Wersja 2.0.XX jest obecnie w trybie konserwacji, a biblioteka otrzymuje tylko poprawki dotyczące integralności danych i problemów z zabezpieczeniami. Nie zostaną dodane żadne nowe funkcje ani funkcje, a nowe wersje usługi magazynu nie będą obsługiwane przez bibliotekę.

Wersje beta nowoczesnej biblioteki przenoszenia danych są obecnie opracowywane. Aby uzyskać więcej informacji, zobacz Azure Storage Data Movement Common client library for .NET on GitHub (Wspólna biblioteka klienta przenoszenia danych usługi Azure Storage dla platformy .NET w witrynie GitHub).

Biblioteka przenoszenia danych usługi Azure Storage to międzyplatformowa biblioteka typu open source przeznaczona do przekazywania, pobierania i kopiowania obiektów blob i plików o wysokiej wydajności. Biblioteka przenoszenia danych udostępnia wygodne metody, które nie są dostępne w bibliotece klienta usługi Azure Storage dla platformy .NET. Te metody umożliwiają ustawianie liczby operacji równoległych, śledzenie postępu transferu, łatwe wznawianie anulowanego transferu i wiele innych.

Ta biblioteka używa również platformy .NET Core, co oznacza, że można jej używać podczas kompilowania aplikacji platformy .NET dla systemów Windows, Linux i macOS. Aby dowiedzieć się więcej na temat platformy .NET Core, zapoznaj się z dokumentacją platformy .NET Core. Ta biblioteka działa również w przypadku tradycyjnych aplikacji .NET Framework dla systemu Windows.

W tym dokumencie pokazano, jak utworzyć aplikację konsolową platformy .NET Core działającą w systemach Windows, Linux i macOS oraz wykonywać następujące scenariusze:

  • Przekazywanie plików i katalogów do usługi Blob Storage.
  • Definiowanie liczby operacji równoległych podczas przesyłania danych.
  • Śledzenie postępu transferu danych.
  • Wznów anulowany transfer danych.
  • Skopiuj plik z adresu URL do usługi Blob Storage.
  • Skopiuj z usługi Blob Storage do usługi Blob Storage.

Wymagania wstępne

Ustawienia

  1. Zapoznaj się z przewodnikiem instalacji platformy .NET Core, aby zainstalować zestaw .NET Core SDK. Podczas wybierania środowiska wybierz opcję wiersza polecenia.
  2. W wierszu polecenia utwórz katalog dla projektu. Przejdź do tego katalogu, a następnie wpisz dotnet new console -o <sample-project-name> , aby utworzyć projekt konsoli języka C#.
  3. Otwórz ten katalog w programie Visual Studio Code. Ten krok można szybko wykonać za pomocą wiersza polecenia, wpisując code . w systemie Windows.
  4. Zainstaluj rozszerzenie języka C# z witryny Visual Studio Code Marketplace. Uruchom ponownie program Visual Studio Code.
  5. W tym momencie powinny zostać wyświetlone dwa monity. Jednym z nich jest dodanie "wymaganych zasobów do kompilowania i debugowania". Kliknij przycisk "tak". Innym monitem jest przywrócenie nierozwiązanych zależności. Kliknij pozycję "Przywróć".
  6. Zmodyfikuj launch.json w obszarze .vscode , aby użyć zewnętrznego terminalu jako konsoli. To ustawienie powinno być odczytywane jako "console": "externalTerminal"
  7. Program Visual Studio Code umożliwia debugowanie aplikacji platformy .NET Core. Naciśnij pozycję F5 , aby uruchomić aplikację i sprawdzić, czy konfiguracja działa. W konsoli powinien zostać wyświetlony komunikat "Hello World!".

Dodawanie biblioteki przenoszenia danych do projektu

  1. Dodaj najnowszą wersję biblioteki przenoszenia danych do dependencies sekcji <project-name>.csproj pliku. W momencie pisania tej wersji będzie to "Microsoft.Azure.Storage.DataMovement": "0.6.2"
  2. Monit powinien zostać wyświetlony w celu przywrócenia projektu. Kliknij przycisk "przywróć". Projekt można również przywrócić z wiersza polecenia, wpisując polecenie dotnet restore w katalogu głównym katalogu projektu.

Modyfikuj <project-name>.csproj:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp2.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.Azure.Storage.DataMovement" Version="0.6.2" />
        </ItemGroup>
    </Project>

Konfigurowanie szkieletu aplikacji

Pierwszą rzeczą, jaką robimy, jest skonfigurowanie kodu "szkieletu" naszej aplikacji. Ten kod wyświetla monit o podanie nazwy konta magazynu i klucza konta i używa tych poświadczeń do utworzenia CloudStorageAccount obiektu. Ten obiekt jest używany do interakcji z naszym kontem magazynu we wszystkich scenariuszach transferu. Kod wyświetla również monit o wybranie typu operacji transferu, która ma zostać wykonana.

Modyfikuj Program.cs:

using System;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Blob;
using Microsoft.Azure.Storage.DataMovement;

namespace DMLibSample
{
    public class Program
    {
        public static void Main()
        {
            Console.WriteLine("Enter Storage account name:");
            string accountName = Console.ReadLine();

            Console.WriteLine("\nEnter Storage account key:");
            string accountKey = Console.ReadLine();

            string storageConnectionString = "DefaultEndpointsProtocol=https;AccountName=" + accountName + ";AccountKey=" + accountKey;
            CloudStorageAccount account = CloudStorageAccount.Parse(storageConnectionString);

            ExecuteChoice(account);
        }

        public static void ExecuteChoice(CloudStorageAccount account)
        {
            Console.WriteLine("\nWhat type of transfer would you like to execute?\n1. Local file --> Azure Blob\n2. Local directory --> Azure Blob directory\n3. URL (e.g. Amazon S3 file) --> Azure Blob\n4. Azure Blob --> Azure Blob");
            int choice = int.Parse(Console.ReadLine());

            if(choice == 1)
            {
                TransferLocalFileToAzureBlob(account).Wait();
            }
            else if(choice == 2)
            {
                TransferLocalDirectoryToAzureBlobDirectory(account).Wait();
            }
            else if(choice == 3)
            {
                TransferUrlToAzureBlob(account).Wait();
            }
            else if(choice == 4)
            {
                TransferAzureBlobToAzureBlob(account).Wait();
            }
        }

        public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
        {

        }

        public static async Task TransferLocalDirectoryToAzureBlobDirectory(CloudStorageAccount account)
        {

        }

        public static async Task TransferUrlToAzureBlob(CloudStorageAccount account)
        {

        }

        public static async Task TransferAzureBlobToAzureBlob(CloudStorageAccount account)
        {

        }
    }
}

Przekazywanie pliku lokalnego do obiektu blob

Dodaj metody GetSourcePath i GetBlob do Program.cspolecenia :

public static string GetSourcePath()
{
    Console.WriteLine("\nProvide path for source:");
    string sourcePath = Console.ReadLine();

    return sourcePath;
}

public static CloudBlockBlob GetBlob(CloudStorageAccount account)
{
    CloudBlobClient blobClient = account.CreateCloudBlobClient();

    Console.WriteLine("\nProvide name of Blob container:");
    string containerName = Console.ReadLine();
    CloudBlobContainer container = blobClient.GetContainerReference(containerName);
    container.CreateIfNotExistsAsync().Wait();

    Console.WriteLine("\nProvide name of new Blob:");
    string blobName = Console.ReadLine();
    CloudBlockBlob blob = container.GetBlockBlobReference(blobName);

    return blob;
}

Zmodyfikuj metodę TransferLocalFileToAzureBlob :

public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
{
    string localFilePath = GetSourcePath();
    CloudBlockBlob blob = GetBlob(account);
    Console.WriteLine("\nTransfer started...");
    await TransferManager.UploadAsync(localFilePath, blob);
    Console.WriteLine("\nTransfer operation complete.");
    ExecuteChoice(account);
}

Ten kod wyświetla nam monit o ścieżkę do pliku lokalnego, nazwę nowego lub istniejącego kontenera oraz nazwę nowego obiektu blob. Metoda TransferManager.UploadAsync wykonuje przekazywanie przy użyciu tych informacji.

Naciśnij pozycję , F5 aby uruchomić aplikację. Możesz sprawdzić, czy przekazywanie nastąpiło, wyświetlając konto usługi Storage przy użyciu Eksplorator usługi Microsoft Azure Storage.

Ustawianie liczby operacji równoległych

Jedną z funkcji oferowanych przez bibliotekę przenoszenia danych jest możliwość ustawienia liczby operacji równoległych w celu zwiększenia przepływności transferu danych. Domyślnie biblioteka przenoszenia danych ustawia liczbę operacji równoległych na 8 * liczbę rdzeni na maszynie.

Należy pamiętać, że wiele równoległych operacji w środowisku o niskiej przepustowości może przeciążyć połączenie sieciowe i w rzeczywistości uniemożliwić wykonywanie operacji w pełni. Musisz poeksperymentować z tym ustawieniem, aby określić, co działa najlepiej na podstawie dostępnej przepustowości sieci.

Dodajmy kod, który pozwala nam ustawić liczbę operacji równoległych. Dodajmy również kod, który czas potrzebny na ukończenie transferu.

Dodaj metodę SetNumberOfParallelOperations do Program.csmetody :

public static void SetNumberOfParallelOperations()
{
    Console.WriteLine("\nHow many parallel operations would you like to use?");
    string parallelOperations = Console.ReadLine();
    TransferManager.Configurations.ParallelOperations = int.Parse(parallelOperations);
}

Zmodyfikuj metodę , ExecuteChoice aby użyć metody SetNumberOfParallelOperations:

public static void ExecuteChoice(CloudStorageAccount account)
{
    Console.WriteLine("\nWhat type of transfer would you like to execute?\n1. Local file --> Azure Blob\n2. Local directory --> Azure Blob directory\n3. URL (e.g. Amazon S3 file) --> Azure Blob\n4. Azure Blob --> Azure Blob");
    int choice = int.Parse(Console.ReadLine());

    SetNumberOfParallelOperations();

    if(choice == 1)
    {
        TransferLocalFileToAzureBlob(account).Wait();
    }
    else if(choice == 2)
    {
        TransferLocalDirectoryToAzureBlobDirectory(account).Wait();
    }
    else if(choice == 3)
    {
        TransferUrlToAzureBlob(account).Wait();
    }
    else if(choice == 4)
    {
        TransferAzureBlobToAzureBlob(account).Wait();
    }
}

Zmodyfikuj metodę , TransferLocalFileToAzureBlob aby użyć czasomierza:

public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
{
    string localFilePath = GetSourcePath();
    CloudBlockBlob blob = GetBlob(account);
    Console.WriteLine("\nTransfer started...");
    Stopwatch stopWatch = Stopwatch.StartNew();
    await TransferManager.UploadAsync(localFilePath, blob);
    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Śledzenie postępu transferu

Wiedza na temat czasu przesyłania danych jest przydatna. Jednak możliwość zobaczenia postępu transferu podczas operacji transferu byłaby jeszcze lepsza. Aby osiągnąć ten scenariusz, musimy utworzyć TransferContext obiekt. Obiekt TransferContext ma dwie formy: SingleTransferContext i DirectoryTransferContext. Pierwszy z nich służy do przesyłania pojedynczego pliku, a drugi służy do przesyłania katalogu plików.

Dodaj metody GetSingleTransferContext i GetDirectoryTransferContext do Program.cspolecenia :

public static SingleTransferContext GetSingleTransferContext(TransferCheckpoint checkpoint)
{
    SingleTransferContext context = new SingleTransferContext(checkpoint);

    context.ProgressHandler = new Progress<TransferStatus>((progress) =>
    {
        Console.Write("\rBytes transferred: {0}", progress.BytesTransferred );
    });

    return context;
}

public static DirectoryTransferContext GetDirectoryTransferContext(TransferCheckpoint checkpoint)
{
    DirectoryTransferContext context = new DirectoryTransferContext(checkpoint);

    context.ProgressHandler = new Progress<TransferStatus>((progress) =>
    {
        Console.Write("\rBytes transferred: {0}", progress.BytesTransferred );
    });

    return context;
}

Zmodyfikuj metodę , TransferLocalFileToAzureBlob aby użyć metody GetSingleTransferContext:

public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
{
    string localFilePath = GetSourcePath();
    CloudBlockBlob blob = GetBlob(account);
    TransferCheckpoint checkpoint = null;
    SingleTransferContext context = GetSingleTransferContext(checkpoint);
    Console.WriteLine("\nTransfer started...\n");
    Stopwatch stopWatch = Stopwatch.StartNew();
    await TransferManager.UploadAsync(localFilePath, blob, null, context);
    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Wznów anulowany transfer

Kolejną wygodną funkcją oferowaną przez bibliotekę przenoszenia danych jest możliwość wznowienia anulowanego transferu. Dodajmy kod, który pozwala nam tymczasowo anulować transfer, wpisując cpolecenie , a następnie wznów transfer 3 sekundy później.

Modyfikuj TransferLocalFileToAzureBlob:

public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
{
    string localFilePath = GetSourcePath();
    CloudBlockBlob blob = GetBlob(account);
    TransferCheckpoint checkpoint = null;
    SingleTransferContext context = GetSingleTransferContext(checkpoint);
    CancellationTokenSource cancellationSource = new CancellationTokenSource();
    Console.WriteLine("\nTransfer started...\nPress 'c' to temporarily cancel your transfer...\n");

    Stopwatch stopWatch = Stopwatch.StartNew();
    Task task;
    ConsoleKeyInfo keyinfo;
    try
    {
        task = TransferManager.UploadAsync(localFilePath, blob, null, context, cancellationSource.Token);
        while(!task.IsCompleted)
        {
            if(Console.KeyAvailable)
            {
                keyinfo = Console.ReadKey(true);
                if(keyinfo.Key == ConsoleKey.C)
                {
                    cancellationSource.Cancel();
                }
            }
        }
        await task;
    }
    catch(Exception e)
    {
        Console.WriteLine("\nThe transfer is canceled: {0}", e.Message);
    }

    if(cancellationSource.IsCancellationRequested)
    {
        Console.WriteLine("\nTransfer will resume in 3 seconds...");
        Thread.Sleep(3000);
        checkpoint = context.LastCheckpoint;
        context = GetSingleTransferContext(checkpoint);
        Console.WriteLine("\nResuming transfer...\n");
        await TransferManager.UploadAsync(localFilePath, blob, null, context);
    }

    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Do tej pory nasza checkpoint wartość zawsze została ustawiona na nullwartość . Teraz, jeśli anulujemy transfer, pobierzemy ostatni punkt kontrolny naszego transferu, a następnie użyjemy tego nowego punktu kontrolnego w kontekście transferu.

Transferowanie katalogu lokalnego do usługi Blob Storage

Byłoby rozczarowujące, gdyby biblioteka przenoszenia danych mogła przesyłać tylko jeden plik naraz. Na szczęście tak nie jest. Biblioteka przenoszenia danych umożliwia przesyłanie katalogu plików i wszystkich jego podkatalogów. Dodajmy kod, który pozwala nam to zrobić.

Najpierw dodaj metodę do Program.csmetody GetBlobDirectory :

public static CloudBlobDirectory GetBlobDirectory(CloudStorageAccount account)
{
    CloudBlobClient blobClient = account.CreateCloudBlobClient();

    Console.WriteLine("\nProvide name of Blob container. This can be a new or existing Blob container:");
    string containerName = Console.ReadLine();
    CloudBlobContainer container = blobClient.GetContainerReference(containerName);
    container.CreateIfNotExistsAsync().Wait();

    CloudBlobDirectory blobDirectory = container.GetDirectoryReference("");

    return blobDirectory;
}

Następnie zmodyfikuj polecenie TransferLocalDirectoryToAzureBlobDirectory:

public static async Task TransferLocalDirectoryToAzureBlobDirectory(CloudStorageAccount account)
{
    string localDirectoryPath = GetSourcePath();
    CloudBlobDirectory blobDirectory = GetBlobDirectory(account);
    TransferCheckpoint checkpoint = null;
    DirectoryTransferContext context = GetDirectoryTransferContext(checkpoint);
    CancellationTokenSource cancellationSource = new CancellationTokenSource();
    Console.WriteLine("\nTransfer started...\nPress 'c' to temporarily cancel your transfer...\n");

    Stopwatch stopWatch = Stopwatch.StartNew();
    Task task;
    ConsoleKeyInfo keyinfo;
    UploadDirectoryOptions options = new UploadDirectoryOptions()
    {
        Recursive = true
    };

    try
    {
        task = TransferManager.UploadDirectoryAsync(localDirectoryPath, blobDirectory, options, context, cancellationSource.Token);
        while(!task.IsCompleted)
        {
            if(Console.KeyAvailable)
            {
                keyinfo = Console.ReadKey(true);
                if(keyinfo.Key == ConsoleKey.C)
                {
                    cancellationSource.Cancel();
                }
            }
        }
        await task;
    }
    catch(Exception e)
    {
        Console.WriteLine("\nThe transfer is canceled: {0}", e.Message);
    }

    if(cancellationSource.IsCancellationRequested)
    {
        Console.WriteLine("\nTransfer will resume in 3 seconds...");
        Thread.Sleep(3000);
        checkpoint = context.LastCheckpoint;
        context = GetDirectoryTransferContext(checkpoint);
        Console.WriteLine("\nResuming transfer...\n");
        await TransferManager.UploadDirectoryAsync(localDirectoryPath, blobDirectory, options, context);
    }

    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Istnieje kilka różnic między tą metodą a metodą przekazywania pojedynczego pliku. Teraz używamy metody TransferManager.UploadDirectoryAsync i utworzonej getDirectoryTransferContext wcześniej metody. Ponadto udostępniamy options teraz wartość naszej operacji przekazywania, co pozwala nam wskazać, że chcemy dołączyć podkatalogi do przekazywania.

Kopiowanie pliku z adresu URL do obiektu blob

Teraz dodajmy kod, który pozwala nam skopiować plik z adresu URL do obiektu blob platformy Azure.

Modyfikuj TransferUrlToAzureBlob:

public static async Task TransferUrlToAzureBlob(CloudStorageAccount account)
{
    Uri uri = new Uri(GetSourcePath());
    CloudBlockBlob blob = GetBlob(account);
    TransferCheckpoint checkpoint = null;
    SingleTransferContext context = GetSingleTransferContext(checkpoint);
    CancellationTokenSource cancellationSource = new CancellationTokenSource();
    Console.WriteLine("\nTransfer started...\nPress 'c' to temporarily cancel your transfer...\n");

    Stopwatch stopWatch = Stopwatch.StartNew();
    Task task;
    ConsoleKeyInfo keyinfo;
    try
    {
        task = TransferManager.CopyAsync(uri, blob, CopyMethod.ServiceSideAsyncCopy, null, context, cancellationSource.Token);
        while(!task.IsCompleted)
        {
            if(Console.KeyAvailable)
            {
                keyinfo = Console.ReadKey(true);
                if(keyinfo.Key == ConsoleKey.C)
                {
                    cancellationSource.Cancel();
                }
            }
        }
        await task;
    }
    catch(Exception e)
    {
        Console.WriteLine("\nThe transfer is canceled: {0}", e.Message);
    }

    if(cancellationSource.IsCancellationRequested)
    {
        Console.WriteLine("\nTransfer will resume in 3 seconds...");
        Thread.Sleep(3000);
        checkpoint = context.LastCheckpoint;
        context = GetSingleTransferContext(checkpoint);
        Console.WriteLine("\nResuming transfer...\n");
        await TransferManager.CopyAsync(uri, blob, CopyMethod.ServiceSideAsyncCopy, null, context, cancellationSource.Token);
    }

    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Ważnym przypadkiem użycia tej funkcji jest przeniesienie danych z innej usługi w chmurze (np. AWS) na platformę Azure. Jeśli masz adres URL, który zapewnia dostęp do zasobu, możesz łatwo przenieść ten zasób do obiektów blob platformy Azure przy użyciu TransferManager.CopyAsync metody . Ta metoda wprowadza również parametr CopyMethod . W poniższej tabeli przedstawiono dostępne opcje dla tego parametru:

Nazwa elementu członkowskiego Wartość Opis
SyncCopy 0 Pobierz dane ze źródła do pamięci i przekaż dane z pamięci do miejsca docelowego. Obecnie dostępne tylko do kopiowania z jednego zasobu usługi Azure Storage do innego.
ServiceSideAsyncCopy 1 Wyślij żądanie rozpoczęcia kopiowania do usługi Azure Storage, aby umożliwić mu kopiowanie; monitoruj postęp operacji kopiowania do momentu ukończenia kopiowania.
ServiceSideSyncCopy 2 Skopiuj zawartość każdego fragmentu za pomocą polecenia Put Block From URL, Dołącz blok z adresu URL lub Umieść stronę z adresu URL.

Kopiowanie obiektu blob

Inną funkcją, która jest unikatowo udostępniana przez bibliotekę przenoszenia danych, jest możliwość kopiowania z jednego zasobu usługi Azure Storage do innego.

Modyfikuj TransferAzureBlobToAzureBlob:

public static async Task TransferAzureBlobToAzureBlob(CloudStorageAccount account)
{
    CloudBlockBlob sourceBlob = GetBlob(account);
    CloudBlockBlob destinationBlob = GetBlob(account);
    TransferCheckpoint checkpoint = null;
    SingleTransferContext context = GetSingleTransferContext(checkpoint);
    CancellationTokenSource cancellationSource = new CancellationTokenSource();
    Console.WriteLine("\nTransfer started...\nPress 'c' to temporarily cancel your transfer...\n");

    Stopwatch stopWatch = Stopwatch.StartNew();
    Task task;
    ConsoleKeyInfo keyinfo;
    try
    {
        task = TransferManager.CopyAsync(sourceBlob, destinationBlob, CopyMethod.SyncCopy, null, context, cancellationSource.Token);
        while(!task.IsCompleted)
        {
            if(Console.KeyAvailable)
            {
                keyinfo = Console.ReadKey(true);
                if(keyinfo.Key == ConsoleKey.C)
                {
                    cancellationSource.Cancel();
                }
            }
        }
        await task;
    }
    catch(Exception e)
    {
        Console.WriteLine("\nThe transfer is canceled: {0}", e.Message);
    }

    if(cancellationSource.IsCancellationRequested)
    {
        Console.WriteLine("\nTransfer will resume in 3 seconds...");
        Thread.Sleep(3000);
        checkpoint = context.LastCheckpoint;
        context = GetSingleTransferContext(checkpoint);
        Console.WriteLine("\nResuming transfer...\n");
        await TransferManager.CopyAsync(sourceBlob, destinationBlob, CopyMethod.SyncCopy, null, context, cancellationSource.Token);
    }

    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

W tym przykładzie ustawiliśmy parametr logiczny w TransferManager.CopyAsync , aby CopyMethod.SyncCopy wskazać, że chcemy wykonać kopię synchroniczną. Oznacza to, że zasób jest najpierw pobierany na naszą maszynę lokalną, a następnie przekazywany do obiektu blob platformy Azure. Opcja kopiowania synchronicznego to doskonały sposób, aby upewnić się, że operacja kopiowania ma spójną szybkość. Natomiast szybkość kopiowania po stronie serwera asynchronicznego zależy od dostępnej przepustowości sieci na serwerze, co może się wahać. Jednak kopia synchroniczna może wygenerować dodatkowy koszt ruchu wychodzącego w porównaniu z kopią asynchroniczną. Zalecaną metodą jest użycie synchronicznej kopii na maszynie wirtualnej platformy Azure, która znajduje się w tym samym regionie co źródłowe konto magazynu, aby uniknąć kosztów ruchu wychodzącego.

Aplikacja do przenoszenia danych została ukończona. Pełny przykład kodu jest dostępny w witrynie GitHub.

Następne kroki

Dokumentacja biblioteki przenoszenia danych usługi Azure Storage.

Napiwek

Zarządzanie zasobami usługi Azure Blob Storage za pomocą Eksplorator usługi Azure Storage. Eksplorator usługi Azure Storage to bezpłatna, autonomiczna aplikacja firmy Microsoft, która umożliwia zarządzanie zasobami usługi Azure Blob Storage. Za pomocą Eksplorator usługi Azure Storage można wizualnie tworzyć, odczytywać, aktualizować i usuwać kontenery obiektów blob oraz obiekty blob oraz zarządzać dostępem do kontenerów obiektów blob i obiektów blob.