Упражнение. Передача изображения в учетную запись хранения Azure

Завершено

Давайте добавим код, чтобы передать изображение в учетную запись хранения Azure. В этом примере мы передадим следующее изображение в контейнер службы хранилища Azure.

An image of the Docs mascot and the Azure mascot taking a selfie.

Если вы работаете на локальном компьютере, щелкните его правой кнопкой мыши и сохраните его в той же папке, где есть приложение.

  1. Если вы работаете в среде песочницы Microsoft Learn, выполните следующую команду в папке приложения, чтобы скачать образ в песочницу:

    wget https://github.com/MicrosoftDocs/mslearn-connect-app-to-azure-storage/blob/main/images/docs-and-friends-selfie-stick.png?raw=true -O docs-and-friends-selfie-stick.png
    

    В обоих случаях изображение должно иметь имя docs-and-friends-selfie-stick.png.

Передача изображения в Хранилище BLOB-объектов

Для работы с отдельными большими двоичными объектами в учетной записи хранения Azure используйте объект BlobClient. Чтобы получить BlobClient объект, вызовите GetBlobClient метод в BlobContainerClient объекте контейнера, в котором будет храниться большой двоичный объект. При вызове метода GetBlobClient также можно указать имя для большого двоичного объекта в контейнере. В нашем примере имя большого двоичного объекта будет совпадать с именем нашего файла.

  1. После получения объекта BlobClient можно вызвать метод Upload, чтобы передать файл в Хранилище BLOB-объектов Azure. Добавьте следующий код в файл Program.cs :

    string blobName = "docs-and-friends-selfie-stick";
    string fileName = "docs-and-friends-selfie-stick.png";
    BlobClient blobClient = container.GetBlobClient(blobName);
    blobClient.Upload(fileName, true);
    

    Второй аргумент в методе Upload указывает, можно ли перезаписать имеющийся большой двоичный объект с таким же именем. По умолчанию это значение равно false. В этом случае указывается значение true, чтобы программу можно было запускать многократно.

Вывод списка объектов в контейнере Хранилища BLOB-объектов Azure

Чтобы проверить, сработала ли программа, мы испробуем другую возможность пакета SDK для Azure Storage Blob для вывода списка объектов, хранящихся в контейнере в Хранилище BLOB-объектов. Это можно сделать, вызвав метод GetBlobs в объекте BlobContainerClient. Метод GetBlobs возвращает страничный список объектов BlobItem, содержащих данные о каждом большом двоичном объекте в контейнере.

  1. Добавьте следующий код в программу после добавления кода, а затем сохраните файл:

    var blobs = container.GetBlobs();
    foreach (var blob in blobs)
    {
        Console.WriteLine($"{blob.Name} --> Created On: {blob.Properties.CreatedOn:yyyy-MM-dd HH:mm:ss}  Size: {blob.Properties.ContentLength}");
    }
    

    Этот код вызывает GetBlobs в объекте BlobContainerClient для контейнера photos. Затем он выполняет итерацию каждого большого двоичного объекта, выводя имя большого двоичного объекта, дату и время создания большого двоичного объекта, а также его размер. При запуске программы этот код должен находиться в отдельной строке для одного переданного изображения.

  2. Окончательный файл Program.cs должен выглядеть следующим образом (просмотрите его, если вы хотите проверить свою работу).

    using System;
    using Microsoft.Extensions.Configuration;
    using System.IO;
    using Azure.Storage.Blobs;
    
    namespace PhotoSharingApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                var builder = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json");
    
                var configuration = builder.Build();
    
                // Get a connection string to our Azure Storage account.
                var connectionString = configuration.GetConnectionString("StorageAccount");
    
                // Get a reference to the container client object so you can create the "photos" container
                string containerName = "photos";
                BlobContainerClient container = new BlobContainerClient(connectionString, containerName);
                container.CreateIfNotExists();
    
                // Uploads the image to Blob storage.  If a blb already exists with this name it will be overwritten
                string blobName = "docs-and-friends-selfie-stick";
                string fileName = "docs-and-friends-selfie-stick.png";
                BlobClient blobClient = container.GetBlobClient(blobName);
                blobClient.Upload(fileName, true);
    
                // List out all the blobs in the container
                var blobs = container.GetBlobs();
                foreach (var blob in blobs)
                {
                    Console.WriteLine($"{blob.Name} --> Created On: {blob.Properties.CreatedOn:yyyy-MM-dd HH:mm:ss}  Size: {blob.Properties.ContentLength}");
                }
            }
        }
    }
    

Выполнить приложение

  1. Выполните сборку, запустите приложение, чтобы убедиться, что все работает, и передайте изображение в Хранилище BLOB-объектов Azure.

    Примечание.

    Убедитесь, что вы находитесь в каталоге PhotoSharingApp.

    dotnet run
    

Поздравляем!

Вы узнали основные принципы работы с пакетом SDK для BLOB-объектов службы хранилища Azure и хранилищем BLOB-объектов Azure. При желании можно изучить дополнительные возможности, создав еще один контейнер, передав дополнительные изображения в учетную запись хранения или удалив изображение. Дополнительные сведения см. на странице клиентской библиотеки больших двоичных объектов службы хранилища Azure для .NET на сайте GitHub.

Передача изображения в Хранилище BLOB-объектов

Для работы с большими двоичными объектами в контейнере службы хранилища Azure используйте объект BlockBlobClient. Объект BlockBlobClient содержит методы для передачи, скачивания, вывода списка и удаления больших двоичных объектов в контейнере. Чтобы получить BlockBlobObject, вызовите метод getBlockBlobClient в объекте ContainerClient. Затем с помощью метода uploadFile можно передать изображение в службу хранилища Azure.

  1. Добавьте этот код в файл программы index.js сразу после создания контейнера:

    const filename = 'docs-and-friends-selfie-stick.png';
    const blockBlobClient = containerClient.getBlockBlobClient(filename);
    blockBlobClient.uploadFile(filename);
    

Вывод списка объектов в контейнере Хранилища BLOB-объектов Azure

  1. Чтобы убедиться в том, что код работает, вызовите метод listBlobsFlat для объекта ContainerClient в нашей программе. Добавьте этот код в файл index.js , а затем сохраните файл:

    let blobs = containerClient.listBlobsFlat();
    let blob = await blobs.next();
    while (!blob.done) {
        console.log(`${blob.value.name} --> Created: ${blob.value.properties.createdOn}   Size: ${blob.value.properties.contentLength}`);
        blob = await blobs.next();
    }
    

    Этот код выводит все большие двоичные объекты в контейнере Хранилища BLOB-объектов Azure с датой создания и размером большого двоичного объекта. В нашей программе этот код должен выводить одну строку, представляющую один загруженный нами образ.

  2. Окончательный файл должен выглядеть так:

    #!/usr/bin/env node
    require('dotenv').config();
    
    const { BlobServiceClient } = require("@azure/storage-blob");
    
    const storageAccountConnectionString = process.env.AZURE_STORAGE_CONNECTION_STRING;
    const blobServiceClient = BlobServiceClient.fromConnectionString(storageAccountConnectionString);
    
    async function main() {
    // Create a container (folder) if it does not exist
    const containerName = 'photos';
    const containerClient = blobServiceClient.getContainerClient(containerName);
    const containerExists = await containerClient.exists()
    if ( !containerExists) {
        const createContainerResponse = await containerClient.createIfNotExists();
        console.log(`Create container ${containerName} successfully`, createContainerResponse.succeeded);
    }
    else {
        console.log(`Container ${containerName} already exists`);
    }
    
    // Upload the file
    const filename = 'docs-and-friends-selfie-stick.png';
    const blockBlobClient = containerClient.getBlockBlobClient(filename);
    blockBlobClient.uploadFile(filename);
    
    // Get a list of all the blobs in the container
    let blobs = containerClient.listBlobsFlat();
    let blob = await blobs.next();
    while (!blob.done) {
        console.log(`${blob.value.name} --> Created: ${blob.value.properties.createdOn}   Size: ${blob.value.properties.contentLength}`);
        blob = await blobs.next();
    }
    }
    main();
    

Выполнить приложение

  1. Выполните сборку приложения и запустите его.

    Примечание.

    Убедитесь, что вы находитесь в каталоге PhotoSharingApp.

    node index.js
    

    Совет

    Если отобразится сообщение об ошибке применения ключевого слова await, убедитесь, что вы добавили ключевое слово async в определение функции main согласно последнему шагу в приведенной выше инструкции.

Поздравляем!

Вы узнали основные принципы работы с клиентской библиотекой Azure Storage Blob для JavaScript и Хранилищем BLOB-объектов Azure. При желании можно изучить дополнительные возможности, создав еще один контейнер, передав дополнительные изображения в учетную запись хранения или удалив изображение. На странице служба хранилища Azure клиентской библиотеки BLOB-объектов для JavaScript npm.js есть много примеров использования библиотеки.