Поделиться через


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

Совет

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

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

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

Тип общей папки малый и средний бизнес 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;

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

Следующий код удаляет объект blob из файлового ресурса для совместного использования файлов в Azure Storage с вызовом функции 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. Затем пример выводит список блобов в контейнере, загружает файл и отображает его содержимое. Наконец, приложение удаляет blob и контейнер.

Вывод приложения похож на следующий пример:

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-объектов, продолжайте здесь.