Упражнение. Подключение приложения к учетной записи хранения Azure

Завершено

Клиентская библиотека служба хранилища Azure предоставляет объектную модель, используемую для взаимодействия с учетными записями хранения Azure. Она используется для быстрого подключения к учетной записи хранения Azure и использует интерфейсы API службы хранилища Azure.

Объектная модель клиентской библиотеки службы хранилища Azure

Учетная запись хранения в Azure организована в один или несколько контейнеров, в которых хранятся фактические большие двоичные объекты (файлы) в вашей учетной записи. Эти контейнеры похожи на папки в файловой системе. Мы можем использовать клиентская библиотека больших двоичных объектов служба хранилища Azure для .NET, чтобы создать контейнер в учетной записи хранения, в которой хранятся наши фотографии.

Чтобы использовать клиентную библиотеку служба хранилища Azure BLOB-объектов для .NET в программе, необходимо добавить using инструкцию в верхней части программы для Azure.Storage.Blobs пространства имен.

  1. Добавьте следующую команду в Program.cs.

    using Azure.Storage.Blobs;
    

    Для создания контейнеров и управления ими в учетной записи хранения из нашего приложения .NET используйте объект BlobContainerClient. Чтобы создать экземпляр объекта BlobContainerClient, необходимо указать строку подключения к учетной записи хранения и имени контейнера. Имя контейнера должно иметь длину от 3 до 63 символов и может содержать только буквы нижнего регистра и символ дефиса (-). Для этого приложения будет использоваться имя photos.

  2. Добавьте в раздел Main своего приложения следующий код, чтобы получить строку подключения к службе хранилища Azure и создать объект BlobContainerClient.

    var connectionString = configuration.GetConnectionString("StorageAccount");
    string containerName = "photos";
    
    BlobContainerClient container = new BlobContainerClient(connectionString, containerName);
    

    Примечание.

    На этом этапе клиентская библиотека не будет пытаться подключиться к Azure или проверить строку подключения и используемый ключ доступа. Она просто создаст упрощенный клиентский объект, используемый для выполнения операций с Хранилищем BLOB-объектов Azure. Сетевой вызов выполняется только при вызове операции с учетной записью хранения.

  3. Под предыдущими строками добавьте код для создания контейнера photos, в котором будут храниться наши изображения.

    container.CreateIfNotExists();
    
  4. Сохраните файл.

  5. Теперь запустите приложение, чтобы создать контейнер в учетной записи хранения. Так как мы использовали метод CreateIfNotExists, программу можно запускать несколько раз, но контейнер будет создан только при первом запуске.

    dotnet run
    
  6. Чтобы убедиться, что контейнер создан, выполните следующую команду Azure CLI. Не забудьте заменить <name> именем нужной учетной записи хранения.

    az storage container list \
    --account-name <name>
    

Azure Storage Blob для JavaScript содержит несколько клиентских объектов для взаимодействия с большими двоичными объектами службы хранилища Azure. В верхней части этой иерархии находится объект BlobServiceClient. Чтобы использовать этот объект в коде JavaScript, сделайте следующее:

  1. Откройте файл index.js в редакторе кода и добавьте следующую инструкцию сразу после инструкцииrequire('dotenv').config();:

    const { BlobServiceClient } = require("@azure/storage-blob");
    
  2. Теперь необходимо создать BlobServiceClient объект в коде, получив строка подключения учетной записи хранения и передав его в метод fromConnectionString фабрики BlobServiceClient для объекта. Добавьте следующие строки кода:

    const storageAccountConnectionString = process.env.AZURE_STORAGE_CONNECTION_STRING;
    const blobServiceClient = BlobServiceClient.fromConnectionString(storageAccountConnectionString);
    

    Примечание.

    Клиентская библиотека не попытается подключиться к Azure, пока не будет вызвана операция, требующая ее. Клиентский объект — это упрощенный объект, обеспечивающий доступ к Хранилище BLOB-объектов Azure; он не проверяет соединение или используемый ключ доступа.

  3. После определения в программе клиентского объекта можно использовать методы для выполнения фактической работы. Методы, которые выполняют сетевые вызовы, являются асинхронными. Библиотека использует обещания для возврата асинхронных результатов. По этой причине функцию main необходимо пометить как асинхронную. Замените объект функции main следующим кодом. Строка, начинающаяся с двух косых косых черт, является комментарием.

    async function main() {
     // Function code here
    }
    
  4. Сохраните изменения в index.js.

    Теперь добавим код для выполнения операции с учетной записью хранения. Учетная запись хранения организована в один или несколько контейнеров, которые выполняют роль папок в учетной записи хранения. Большие двоичные объекты (файлы), создаваемые в учетной записи хранения, хранятся в одном из этих контейнеров. Для хранения фотографий необходимо создать контейнер в учетной записи хранения.

    Имя контейнера должно иметь длину от 3 до 63 символов и может содержать только буквы нижнего регистра и символ дефиса (-). Для этого приложения будет использоваться имя photos.

    Чтобы создать контейнер в учетной записи хранения, необходимо получить объект ContainerClient, который представляет контейнер в учетной записи хранения. Несмотря на то, что контейнер еще не существует в нашей учетной записи хранения, мы можем использовать ContainerClient его для создания контейнера и управления им после его создания.

  5. Чтобы получить ContainerClient объект, вызовите getContainerClient метод объекта BlobServiceClient и укажите имя контейнера в качестве параметра. Затем можно создать контейнер в учетной записи хранения Azure с помощью метода createIfNotExists для объекта containerClient. Замените строку комментария // Function Code here следующими инструкциями.

    // 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`);
    }
    
  6. Сохраните изменения в файле index.js .

  7. В командной строке Cloud Shell введите следующую команду, чтобы создать и запустить программу, которая создает контейнер в учетной записи хранения:

    node index.js
    

    Совет

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

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

  8. Чтобы убедиться, что контейнер создан, выполните следующую команду Azure CLI. Не забудьте заменить <name> именем нужной учетной записи хранения.

    az storage container list \
    --account-name <name>
    

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