Разработка приложений службы файлов Azure с помощью C++

Совет

Пробное использование обозревателя хранилищ Microsoft Azure

Обозреватель хранилищ Microsoft Azure — это бесплатное автономное приложение от корпорации Майкрософт, позволяющее визуализировать данные из службы хранилища Azure на платформе Windows, macOS и Linux.

Применяется к

Тип общей папки SMB NFS
Стандартные общие папки (GPv2), LRS/ZRS Да Нет
Стандартные общие папки (GPv2), GRS/GZRS Да Нет
Общие папки уровня "Премиум" (FileStorage), LRS/ZRS Да Нет

О данном учебнике

В рамках этого руководства вы узнаете, как выполнять основные операции в службе "Файлы Azure" с использованием C++. Если вы не знакомы со службой "Файлы Azure", мы предлагаем вам изучить понятия, описанные в последующих разделах. Это будет полезно для понимания примеров. Ниже указаны некоторые из рассматриваемых примеров.

  • Создание и удаление общих папок Azure.
  • Создание и удаление каталогов.
  • Передача, загрузка и удаление файлов.
  • Задание и перечисление метаданных для файла

Примечание

Так как к службе файлов Azure можно обращаться через SMB, вы можете создавать простые приложения, которые получают доступ к общей папке Azure с использованием стандартных классов и функций ввода-вывода в C++. Из этой статьи вы узнаете, как создавать приложения, использующие пакет SDK C++ для службы хранилища Azure, который использует REST API службы файлов для взаимодействия со службой файлов Azure.

Предварительные требования

Настройка

В этом разделе рассматривается подготовка проекта для работы с клиентской библиотекой Хранилища BLOB-объектов Azure версии 12 для C++.

Установка пакетов

Команда vcpkg install установит пакет SDK Azure Storage Blobs для C++ и необходимые зависимости.

vcpkg.exe install azure-storage-files-shares-cpp:x64-windows

Для получения дополнительных сведений посетите сайт GitHub, чтобы получить и создать пакет Azure SDK для C++.

Создание проекта

В Visual Studio создайте консольное приложение C++ для Windows с именем FilesShareQuickstartV12.

Диалоговое окно Visual Studio для настройки нового консольного приложения C++ для Windows

Копирование учетных данных с портала Azure

Когда пример приложения выполняет запрос к службе хранилища Azure, он должен быть авторизован. Для авторизации запроса добавьте в приложение учетные данные учетной записи хранения в виде строки подключения. Чтобы просмотреть учетные данные учетной записи хранения, выполните следующие шаги:

  1. Войдите на портал Azure.

  2. Перейдите к учетной записи хранения.

  3. На панели меню учетной записи хранения в разделе Безопасность и сети выберите Ключи доступа. На этой странице вы увидите ключи доступа к учетной записи и полную строку подключения для каждого ключа.

    Снимок экрана: местоположение параметров ключа доступа в портал Azure

  4. В области Ключи доступа выберите команду Показать ключи.

  5. В разделе key1 выберите значение Строка подключения. Нажмите значок Копировать в буфер обмена, чтобы скопировать строку подключения. В следующем разделе вы добавите значение строки подключения в переменную среды.

    Снимок экрана, на котором показано, как скопировать строку подключения с портала Azure

Настройка строки подключения хранилища

После копирования строки подключения запишите ее в переменной среды на локальном компьютере, где выполняется приложение. Чтобы задать переменную среды, откройте окно консоли и следуйте инструкциям для используемой операционной системы. Замените <yourconnectionstring> фактической строкой подключения.

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

После добавления переменной среды в Windows вам необходимо запустить новый экземпляр командного окна.

Перезапуск программ

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

Примеры кода

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

Добавление включения файлов

Из каталога проекта:

  1. Откройте файл решения FilesShareQuickstartV12.sln в Visual Studio.
  2. В Visual Studio откройте исходный файл FilesShareQuickstartV12.cpp.
  3. Удалите весь код в main, который был создан автоматически.
  4. Добавьте в него операторы #include.
#include <iostream>
#include <stdlib.h>
#include <vector>

#include <azure/storage/files/shares.hpp>

Получение строки подключения

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

Добавьте этот код в main():

        // Retrieve the connection string for use with the application. The storage
        // connection string is stored in an environment variable on the machine
        // running the application called AZURE_STORAGE_CONNECTION_STRING.
        // Note that _MSC_VER is set when using MSVC compiler.
        static const char* AZURE_STORAGE_CONNECTION_STRING = "AZURE_STORAGE_CONNECTION_STRING";
#if !defined(_MSC_VER)
        const char* connectionString = std::getenv(AZURE_STORAGE_CONNECTION_STRING);
#else
        // Use getenv_s for MSVC
        size_t requiredSize;
        getenv_s(&requiredSize, NULL, NULL, AZURE_STORAGE_CONNECTION_STRING);
        if (requiredSize == 0) {
            throw std::runtime_error("missing connection string from env.");
        }
        std::vector<char> value(requiredSize);
        getenv_s(&requiredSize, value.data(), value.size(), AZURE_STORAGE_CONNECTION_STRING);
        std::string connectionStringStr = std::string(value.begin(), value.end());
        const char* connectionString = connectionStringStr.c_str();
#endif

Создание общей папки

Создайте экземпляр класса ShareClient, вызвав функцию CreateFromConnectionString. Затем вызовите CreateIfNotExists, чтобы создать общую папку в учетной записи хранения.

Добавьте этот код в конец main():

using namespace Azure::Storage::Files::Shares;

std::string shareName = "sample-share";

// Initialize a new instance of ShareClient
auto shareClient = ShareClient::CreateFromConnectionString(connectionString, shareName);

// Create the files share. This will do nothing if the files share already exists.
std::cout << "Creating files share: " << shareName << std::endl;
shareClient.CreateIfNotExists();

Отправка файлов в общую папку

Приведенный ниже фрагмент кода:

  1. Объявляет строку, содержащую Hello Azure!
  2. Получает ссылку на объект ShareFileClient, получив корневой ShareDirectoryClient, а затем вызвав GetFileClient в общей папке из раздела Создание общей папки.
  3. Передает строку в файл, вызывая функцию UploadFrom. С помощью этой функции создается файл, если он не был создан ранее, или же, если он имеется, происходит его обновление.

Добавьте этот код в конец main():

std::string fileName = "sample-file";
uint8_t fileContent[] = "Hello Azure!";

// Create the ShareFileClient
ShareFileClient fileClient = shareClient.GetRootDirectoryClient().GetFileClient(fileName);

// Upload the file
std::cout << "Uploading file: " << fileName << std::endl;
fileClient.UploadFrom(fileContent, sizeof(fileContent));

Задание метаданных файла

Задайте свойства метаданных для файла, вызвав функцию ShareFileClient.SetMetadata.

Добавьте этот код в конец main():

Azure::Storage::Metadata fileMetadata = { {"key1", "value1"}, {"key2", "value2"} };
fileClient.SetMetadata(fileMetadata);

Перечисление метаданных файла

Получите свойства метаданных для файла, вызвав функцию ShareFileClient.GetProperties. Метаданные находятся в поле Metadata возвращаемого объекта Value. Метаданные будут парой "ключ — значение", как в примере в разделе Задание метаданных файла.

// Retrieve the file properties
auto properties = fileClient.GetProperties().Value;
std::cout << "Listing blob metadata..." << std::endl;
for (auto metadata : properties.Metadata)
{
    std::cout << metadata.first << ":" << metadata.second << std::endl;
}

Загрузка файлов

Получив свойства файла в разделе Перечисление метаданных файла, создайте объект std::vector<uint8_t>, используя свойства отправленного файла. Скачайте ранее созданный файл в новый объект std::vector<uint8_t>, вызвав функцию DownloadTo в базовом классе ShareFileClient. Наконец, отобразите данные скачанного файла.

Добавьте этот код в конец main():

std::vector<uint8_t> fileDownloaded(properties.FileSize);
fileClient.DownloadTo(fileDownloaded.data(), fileDownloaded.size());

std::cout << "Downloaded file contents: " << std::string(fileDownloaded.begin(), fileDownloaded.end()) << std::endl;

Удаление файла

Следующий код удаляет большой двоичный объект из общей папки службы хранилища Azure, вызывая функцию ShareFileClient.Delete.

std::cout << "Deleting file: " << fileName << std::endl;
fileClient.DeleteIfExists();

Удаление общей папки

Следующий код очищает созданные приложением ресурсы, полностью удаляя общую папку с помощью ShareClient.Delete.

Добавьте этот код в конец main():

std::cout << "Deleting files share: " << shareName << std::endl;
shareClient.DeleteIfExists();

Выполнение кода

Это приложение создает контейнер и передает текстовый файл в Хранилище BLOB-объектов Azure. Затем пример выводит список больших двоичных объектов в контейнере, скачивает файл и отображает содержимое файла. Наконец, приложение удаляет большой двоичный объект и контейнер.

Вы должны увидеть выходные данные приложения, как показано ниже.

Azure Files Shares storage v12 - C++ quickstart sample
Creating files share: sample-share
Uploading file: sample-file
Listing file metadata...
key1:value1
key2:value2
Downloaded file contents: Hello Azure!
Deleting file: sample-file
Deleting files share: sample-share

Дальнейшие действия

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

Чтобы просмотреть примеры C++ для Хранилища BLOB-объектов, перейдите к следующему разделу: