Início Rápido: Biblioteca de clientes do Armazenamento de Blobs do Azure v12 para C++

Introdução à biblioteca de clientes do Armazenamento de Blobs do Azure v12 para C++. O Armazenamento de Blobs do Azure é uma solução de armazenamento de objetos da Microsoft para a nuvem. Siga as etapas para instalar o pacote e testar o código de exemplo para tarefas básicas. O Armazenamento de Blobs é otimizado para armazenar grandes quantidades de dados não estruturados.

Use a biblioteca de clientes do Armazenamento de Blobs do Azure v12 para C++ para:

  • Criar um contêiner
  • Carregar um blob para o Armazenamento do Azure
  • Listar todos os blobs em um contêiner
  • Baixar o blob em seu computador local
  • Excluir um contêiner

Recursos:

Pré-requisitos

Configurando

Esta seção fornece instruções sobre como preparar um projeto para funcionar com a biblioteca de clientes do Armazenamento de Blobs do Azure v12 para C++.

Instalar os pacotes

O comando vcpkg install instalará o SDK dos Blobs de Armazenamento do Microsoft Azure para C++ e as dependências necessárias:

vcpkg.exe install azure-storage-blobs-cpp:x64-windows

Para obter mais informações, vá para GitHub para adquirir e compilar o SDK Azure para C++.

Criar o projeto

No Visual Studio, crie um novo aplicativo de console C++ para o Windows chamado BlobQuickstartV12.

Caixa de diálogo do Visual Studio para configurar um novo aplicativo de console C++ do Windows

Copiar suas credenciais no Portal do Azure

Quando o aplicativo de exemplo faz uma solicitação para o Armazenamento do Azure, ele precisa ser autorizado. Para autenticar uma solicitação, adicione suas credenciais da conta de armazenamento ao aplicativo como uma cadeia de conexão. Para ver as credenciais da conta de armazenamento, siga estas etapas:

  1. Entre no portal do Azure.

  2. Localize sua cadeia de conexão.

  3. No painel do menu da conta de armazenamento, em Segurança + rede, selecione Chaves de acesso. Aqui, você pode ver as chaves de acesso da conta, bem como a cadeia de conexão completa para cada chave.

    Captura de tela que mostra onde as configurações da chave de acesso estão na portal do Azure

  4. No painel Chaves de acesso, selecione Mostrar chaves.

  5. Na seção key1, localize o valor Cadeia de conexão. Selecione o ícone Copiar para a área de transferência para copiar a cadeia de conexão. Você adicionará o valor da cadeia de conexão a uma variável de ambiente na próxima seção.

    Captura de tela mostrando como copiar uma cadeia de conexão do portal do Azure

Configurar a cadeia de conexão de armazenamento

Depois de copiar a cadeia de conexão, grave em uma nova variável de ambiente no computador local que executa o aplicativo. Para definir a variável de ambiente, abra uma janela de console e siga as instruções do seu sistema operacional. Substitua <yourconnectionstring> pela cadeia de conexão real.

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

Após adicionar a variável de ambiente no Windows, é necessário iniciar uma nova instância da janela de comando.

Reiniciar programas

Depois de adicionar a variável de ambiente, reinicie todos os programas em execução que precisarem ler a variável de ambiente. Por exemplo, reinicie seu ambiente ou editor de desenvolvimento antes de continuar.

Modelo de objeto

O Armazenamento de Blobs do Azure é otimizado para armazenar grandes quantidades de dados não estruturados. Dados não estruturados são dados que não estão de acordo com uma definição ou um modelo de dados específico, como texto ou dados binários. O Armazenamento de Blobs oferece três tipos de recursos:

  • A conta de armazenamento
  • Um contêiner na conta de armazenamento
  • Um blob no contêiner

O diagrama a seguir mostra a relação entre esses recursos.

Diagrama da arquitetura de Armazenamento de Blobs

Use estas classes C++ para interagir com esses recursos:

  • BlobServiceClient: a classe BlobServiceClient permite manipular os recursos do Armazenamento do Azure e os contêineres do blob.
  • BlobContainerClient: a classe BlobContainerClient permite manipular os contêineres do Armazenamento do Azure e seus blobs.
  • BlobClient: a classe BlobClient permite manipular os blobs do Armazenamento do Azure. É a classe base para todas as classes de blob especializadas.
  • BlockBlobClient: A classe BlockBlobClient permite manipular os blobs de blocos de Armazenamento do Azure.

Exemplos de código

Esses snippets de código de exemplo mostram como fazer as seguintes tarefas com a biblioteca de clientes do Armazenamento de Blobs do Azure para C++:

Adicionar arquivos de inclusão

No diretório do projeto:

  1. Abra o arquivo da solução BlobQuickstartV12.sln no Visual Studio
  2. Dentro do Visual Studio, abra o arquivo de origem do BlobQuickstartV12. cpp
  3. Remova qualquer código dentro de main que foi gerado automaticamente
  4. Adicione instruções #include
#include <stdlib.h>
#include <iostream>
#include <azure/storage/blobs.hpp>

Obtenha a cadeia de conexão

O código a seguir recupera a cadeia de conexão da conta de armazenamento a partir da variável de ambiente criada em Configurar a cadeia de conexão do armazenamento.

Adicione este código a 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

Criar um contêiner

Crie uma instância da classe BlobServiceClient chamando a função fromConnectionString. Em seguida, chame CreateIfNotExists para criar o contêiner real em sua conta de armazenamento.

Importante

Os nomes de contêiner devem estar em minúsculas. Para saber mais sobre como nomear contêineres e blobs, veja Nomenclatura e referência de contêineres, blobs e metadados.

Adicione este código ao final de main():

using namespace Azure::Storage::Blobs;

std::string containerName = "myblobcontainer";

// Initialize a new instance of BlobContainerClient
BlobContainerClient containerClient
    = BlobContainerClient::CreateFromConnectionString(connectionString, containerName);

// Create the container. This will do nothing if the container already exists.
std::cout << "Creating container: " << containerName << std::endl;
containerClient.CreateIfNotExists();

Carregar blobs em um contêiner

O trecho de código a seguir:

  1. Declara uma string contendo "Olá, Azure!".
  2. Obtém uma referência para um objeto BlockBlobClient chamando o método GetBlockBlobClient no contêiner da seção Criar um contêiner.
  3. Carrega a cadeia de caracteres para o blob chamando a função UploadFrom. Essa operação criará o blob se ele ainda não existir e o substituirá, se já existir.

Adicione este código ao final de main():

std::string blobName = "blob.txt";
uint8_t blobContent[] = "Hello Azure!";
// Create the block blob client
BlockBlobClient blobClient = containerClient.GetBlockBlobClient(blobName);

// Upload the blob
std::cout << "Uploading blob: " << blobName << std::endl;
blobClient.UploadFrom(blobContent, sizeof(blobContent));

Listar os blobs em um contêiner

Liste os blobs no contêiner chamando a função ListBlobs. Apenas um blob foi adicionado ao contêiner, portanto, a operação retorna apenas esse blob.

Adicione este código ao final de main():

std::cout << "Listing blobs..." << std::endl;
auto listBlobsResponse = containerClient.ListBlobs();
for (auto blobItem : listBlobsResponse.Blobs)
{
    std::cout << "Blob name: " << blobItem.Name << std::endl;
}

Baixar blobs

Obtenha as propriedades do blob carregado. Em seguida, declare e redimensione um novo objeto std::vector<uint8_t> usando as propriedades do blob carregado. Baixe o blob criado anteriormente no novo objeto std::vector<uint8_t> chamando a função Downloadto na classe base BlobClient. Por fim, exiba os dados de blob baixados.

Adicione este código ao final de main():

auto properties = blobClient.GetProperties().Value;
std::vector<uint8_t> downloadedBlob(properties.BlobSize);

blobClient.DownloadTo(downloadedBlob.data(), downloadedBlob.size());
std::cout << "Downloaded blob contents: " << std::string(downloadedBlob.begin(), downloadedBlob.end()) << std::endl;

Excluir um blob

O código a seguir exclui o blob do contêiner de Armazenamento de Blobs do Azure chamando a função BlobClient.Delete.

std::cout << "Deleting blob: " << blobName << std::endl;
blobClient.Delete();

Excluir um contêiner

O código a seguir limpa os recursos que o aplicativo criou ao excluir todo o contêiner usando BlobContainerClient.Delete.

Adicione este código ao final de main():

std::cout << "Deleting container: " << containerName << std::endl;
containerClient.Delete();

Executar o código

Esse aplicativo cria um contêiner e carrega um arquivo de texto para o armazenamento de Blob do Azure. Em seguida, lista os blobs no contêiner, baixa o arquivo e exibe o conteúdo do arquivo. Por fim, o aplicativo exclui o blob e o contêiner.

A saída do aplicativo é semelhante ao seguinte exemplo:

Azure Blob Storage v12 - C++ quickstart sample
Creating container: myblobcontainer
Uploading blob: blob.txt
Listing blobs...
Blob name: blob.txt
Downloaded blob contents: Hello Azure!
Deleting blob: blob.txt
Deleting container: myblobcontainer

Próximas etapas

Neste início rápido você aprendeu a carregar, baixar e listar blobs usando C++. Você também aprendeu a criar e excluir um contêiner de Armazenamento de Blob do Azure.

Para ver o exemplo de armazenamento de blob C++, prossiga para: