Exercício – Carregar uma imagem para a sua conta de Armazenamento do Azure

Concluído

Vamos adicionar código para carregar uma imagem para a sua conta de Armazenamento do Azure. Neste exemplo, iremos carregar a seguinte imagem para o nosso contentor do Armazenamento do Azure.

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

Se estiver a trabalhar na sua máquina local, clique com o botão direito do rato nesta imagem e guarde-a na mesma pasta onde tem a sua aplicação.

  1. Se você estiver trabalhando no ambiente Microsoft Learn Sandbox, execute o seguinte comando na pasta do aplicativo para baixar a imagem em sua área restrita:

    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
    

    Em ambos os casos, o nome da imagem deve ser docs-and-friends-selfie-stick.png.

Carregar uma imagem para o armazenamento de blobs

Para trabalhar com objetos de blob individuais na sua conta de Armazenamento do Azure, utiliza um objeto BlobClient. Para obter um BlobClient objeto, chame o GetBlobClientBlobContainerClient método no objeto do contêiner onde o blob será armazenado. Ao chamar o método GetBlobClient, também indica um nome para o blob no contentor. No nosso exemplo, o nome do blob será o mesmo que o nome do nosso ficheiro.

  1. Quando tiver um objeto BlobClient, pode chamar o método Upload para carregar um ficheiro para o Armazenamento de Blobs do Azure. Adicione o seguinte código ao arquivo .cs programa:

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

    O segundo argumento no método Upload especifica se um objeto de blob existente com o mesmo nome pode ser substituído. Por padrão, esse valor é false. Nesse caso, estamos especificando true para permitir que o programa seja executado várias vezes.

Listar objetos num contentor do Armazenamento de Blobs do Azure

Para verificar se o programa funcionou, irá utilizar outra capacidade do SDK do Azure Storage Blob: listar os objetos armazenados num contentor no armazenamento de blobs. Podemos fazê-lo ao chamar o método GetBlobs num objeto BlobContainerClient. O método GetBlobs devolve uma lista paginável de objetos BlobItem que contêm dados sobre cada blob no contentor.

  1. Adicione o seguinte código ao seu programa após o código que você adicionou anteriormente e, em seguida, salve o arquivo:

    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}");
    }
    

    Este código chama GetBlobs no objeto BlobContainerClient para o contentor photos. Em seguida, é iterado através de cada blob e imprime o nome do mesmo, a data e a hora em que foi criado, assim como o respetivo tamanho. Ao executar o programa, este código deverá ser apresentado como uma única linha da imagem que foi carregada.

  2. O arquivo final .cs Programa deve ter esta aparência se você quiser verificar seu trabalho.

    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}");
                }
            }
        }
    }
    

Executar a aplicação

  1. Compile e execute a aplicação para verificar se tudo funciona e carregar a imagem para o Armazenamento de Blobs do Azure.

    Nota

    Certifique-se de que está no diretório PhotoSharingApp.

    dotnet run
    

Parabéns!

Você aprendeu o essencial de trabalhar com o pacote SDK de Blobs de Armazenamento do Azure e o Armazenamento de Blobs do Azure. Se quiser, explore ainda mais ao criar outro contentor, carregar mais imagens para a conta de armazenamento ou eliminar uma imagem. Pode saber mais na página do GitHub da biblioteca de cliente do Azure Storage Blob para .NET.

Carregar uma imagem para o armazenamento de blobs

Para trabalhar com objetos de blobs no contentor do Armazenamento do Azure, utilize um objeto BlockBlobClient. O objeto BlockBlobClient tem métodos para carregar, transferir, listar e eliminar objetos de blobs num contentor. Para obter um BlockBlobObject, chame o método getBlockBlobClient no objeto ContainerClient. Em seguida, pode utilizar o método uploadFile para carregar a sua imagem para o Armazenamento do Azure.

  1. Adicione este código ao seu arquivo de programa .js índice imediatamente após o código que cria o contêiner:

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

Listar objetos num contentor do Armazenamento de Blobs do Azure

  1. Para confirmar que o código está a funcionar, podemos chamar o método listBlobsFlat no objeto ContainerClient no nosso programa. Adicione este código ao arquivo .js índice e salve o arquivo:

    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();
    }
    

    Este código imprime todos os blobs no contentor do Armazenamento de Blobs do Azure com a data em que o blob foi criado e o respetivo tamanho. Para o nosso programa, este código deve imprimir uma linha que representa a única imagem que carregamos.

  2. O ficheiro final deverá ter o seguinte aspeto.

    #!/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();
    

Executar a aplicação

  1. Compile e execute a aplicação.

    Nota

    Certifique-se de que está no diretório PhotoSharingApp.

    node index.js
    

    Gorjeta

    Se você receber um erro sobre o uso da palavra-chave, certifique-se de ter adicionado a palavra-chave à main definição da await função de acordo com a async etapa final nas instruções anteriores.

Parabéns!

Você aprendeu o essencial de trabalhar a Biblioteca de Cliente de Blob de Armazenamento do Azure para JavaScript e o Armazenamento de Blobs do Azure. Se quiser, explore ainda mais ao criar outro contentor, carregar mais imagens para a conta de armazenamento ou eliminar uma imagem. A página da Biblioteca de Cliente de Blob de Armazenamento do Azure para JavaScript npm.js tem muitos exemplos de como usar a biblioteca.