Ir para o conteúdo
Como gerenciar o Armazenamento de Blobs do Microsoft Azure com o Node.js

Como gerenciar o Armazenamento de Blobs do Microsoft Azure com o Node.js

Você aprenderá a começar com o Armazenamento de Nó e Blobs, abrangendo os casos vistos com mais frequência.

7min read

Node.js é uma das plataformas de crescimento mais populares para desenvolvimento. A linguagem usada com Node.js é JavaScript – a linguagem #1 mais usada no GitHub, e essa tendência só vai aumentar (Forbes, 14 de julho de 2014).

Microsoft Azure Blob Storage

Os serviços de armazenamento do Microsoft Azure nos permitem armazenar/recuperar os dados NÃO RELACIONAIS de/para o ambiente de nuvem do Windows. No Armazenamento do Microsoft Azure, os dados podem ser armazenados em 4 formatos diferentes (v.i.z. Blobs, Tabelas e Filas, Armazenamento de Arquivos (em versão prévia).

O que é um blob?

O Armazenamento de Blobs do Azure é um serviço para armazenar grandes quantidades de dados não estruturados que podem ser acessados de qualquer lugar do mundo via HTTP ou HTTPS. Um único blob pode ter centenas de gigabytes de tamanho.

O serviço Blob contém os seguintes componentes:

  • Conta de armazenamento: Todo o acesso ao Armazenamento do Azure é feito por meio de uma conta de armazenamento.

  • Recipiente: Um contêiner fornece um agrupamento de um conjunto de blobs. Todos os blobs devem estar em um contêiner. Uma conta pode conter um número ilimitado de contêineres. Um contêiner pode armazenar um número ilimitado de blobs.

  • BLOB: Um arquivo de qualquer tipo e tamanho. Há dois tipos de blobs que podem ser armazenados no Armazenamento do Azure: blobs de blocos e de páginas. A maioria dos arquivos são blobs de blocos. Um único blob de blocos pode ter até 200 GB de tamanho. Este tutorial usa blobs de blocos. Os blobs de páginas, outro tipo de blob, podem ter até 1 TB de tamanho e são mais eficientes quando os intervalos de bytes em um arquivo são modificados com frequência.

Blob significa 'objeto binário grande', que é uma matriz de bytes brutos. A figura a seguir mostra a estrutura hierárquica usada para o armazenamento de Blobs no Windows Azure:

A Conta de Armazenamento do Azure pode ter vários Contêineres. Um contêiner pode ser considerado como uma matriz ou coleção de um ou mais blobs. Além disso, cada Blob pode ter uma ou mais propriedades de metadados para definir o que é o conteúdo do Blob. As propriedades de metadados são uma coleção de nome-valor de cadeias de caracteres.

Como mencionado anteriormente, o conteúdo de cada Blob no Microsoft Azure pode ser acessado navegando em seu REST (URI) correspondente. O URI geralmente tem o seguinte formato:

https://<Account>.blob.core.windows.net/<Container>/<BlobName>

Como usar o armazenamento de blobs e Node.JS?

Você pode usar diferentes pacotes NodeJS para lidar com o Armazenamento de Blobs do Azure. Neste post, abordaremos o pacote Azure Node (um SDK oficial do Microsoft Azure).

Microsoft Azure SDK for Node.js

O SDK oficial do Microsoft Azure (npm page: https://www.npmjs.org/package/azure, homepage: http://github.com/WindowsAzure/azure-sdk-for-node) para Node.js.  fornece um pacote Node.js que facilita o consumo e o gerenciamento dos Serviços do Microsoft Azure.

Os snippets listados abaixo demonstram como gerenciar o serviço Blob do Azure usando o SDK do Microsoft Azure para Node.js.

Create an Azure Blob Service

Você pode criar o Serviço Blob do Azure usando as variáveis de ambiente para armazenar as credenciais da mesma forma que para o Serviço Tabela do Azure.

List Blobs in Azure Blob Storage

JavaScript code:

var azure = require('azure');

exports.blobs = function (request, response) {

    var accessKey = '[accountKey]';
    var storageAccount = '[accountName]';
    var container = 'nodejs';

    var blobService = azure.createBlobService(storageAccount, accessKey);
    // render blobs with blobs.jade view
    blobService.listBlobs(container, function (error, blobs) {
        response.render('blobs', {
            error: error,
            container: container,
            blobs: blobs
        });
    });
}

A jade view ( using Express.js )

extends layout

block content
    h1 Blob listing for #{container}

    if error
        h3= error

    if blobs
        h3= container
        table
            tr
                th Name
                th Properties
            - each blob in blobs
                tr
                    td= blob.name
                    td
                        ul
                            - each value, name in blob.properties
                                if value
                                    li= name + ":" + value
blob listing for nodejs

Upload File To Azure Blob Storage

Uma abordagem é usar um módulo de nó multipartidário. É um analisador de dados de várias partes/formulário que suporta streaming.  Podemos acessar os dados de várias partes usando Multiparty (npm install multiparty), um fork do Formidable. Este módulo não transmitirá o arquivo para o disco, a menos que você diga.

// upload a file to azure blob storage
app.get('/upload', function (req, res) {
    res.send(
        '<form action="/upload" method="post" enctype="multipart/form-data">' +
        '<input type="file" name="snapshot" />' +
        '<input type="submit" value="Upload" />' +
        '</form>'
    );
});

app.post('/upload', function (req, res) {
    var multiparty = require('multiparty');
    var accessKey = '[accountKey]';
    var storageAccount = '[accountName]';

    var container = 'nodejs';    
    var blobService = azure.createBlobService(storageAccount, accessKey);
    var form = new multiparty.Form();
    
    form.on('part', function (part) {
        if (part.filename) {
            var size = part.byteCount - part.byteOffset;
            var name = part.filename;
            
            blobService.createBlockBlobFromStream(container, name, part, size, function (error) {
                if (error) {
                    res.send('Blob create: error');
                }
            });
        } else {
            form.handlePart(part);
        }
    });

    form.parse(req);
    res.send('OK');
});
// end of upload a file to azure blob storage

As telas abaixo demonstram como carregar arquivos no Armazenamento de Blobs do Azure usando o aplicativo de demonstração de exemplo.

demonstrar como carregar arquivo no Armazenamento de Blobs do Azure usando o aplicativo de demonstração de exemplo 1

demonstrar como carregar o arquivo no Armazenamento de Blobs do Azure usando o aplicativo de demonstração de exemplo 2

Baixar arquivos do Armazenamento de Blobs do Azure

Para baixar o blob e gravá-lo no sistema de arquivos, um método getBlob ou getBlobToFile semelhante pode ser usado.

O recorte abaixo demonstra como usar getBlob:

var azure = require('azure');
var fs = require('fs');

var blobService = azure.createBlobService();

// using getBlob to save a file from Azure Blob
blobService.getBlob('[containerName]', '[blobName]').pipe(fs.createWriteStream('[myFileName]'));

O código abaixo faz parte do aplicativo de demonstração, demonstrando como baixar o arquivo do Armazenamento de Blobs do Azure usando getBlobToFile:

// download azure blob storage content
app.get('/downloadBlob', function (req, res) {
    res.send(
        '<form action="/downloadBlob" method="post">' +
        '<input type="text" name="blobFile" value="C:\\temp" />' +
        '<input type="submit" value="Download" />' +
        '</form>'
    );
});

app.post('/downloadBlob', function (req, res) {
    var fs = require('fs');

    if (!fs.existsSync) {
        fs.existsSync = require('path').existsSync;
    }

    var destinationDirectoryPath = req.body.blobFile;
    var accessKey = '[accountKey]';
    var storageAccount = '[accountName]';
    var containerName = 'nodejs';

    var blobService = azure.createBlobService(storageAccount, accessKey);

    if (!fs.existsSync(destinationDirectoryPath)) {
        console.log(destinationDirectoryPath + ' is an invalid directory path.');
    } else {
        downloadFilesParallel(res, blobService, containerName, destinationDirectoryPath);
    }
});

downloadFilesParallel, usada no código acima:

function downloadFilesParallel(res, blobService, containerName, destinationDirectoryPath) {
    blobService.listBlobs(containerName, function (error, blobs) {
        if (error) {
            console.log(error);
        } else {
            var blobsDownloaded = 0;
            res.writeHead(200, { 'Content-Type': 'text/plain' });

            blobs.forEach(function (blob) {
                blobService.getBlobToFile(containerName, blob.name, destinationDirectoryPath + '/' + blob.name, function (error2) {
                    blobsDownloaded++;

                    if (error2) {
                        console.log(error2);
                    } else {
                        res.write('\nBlob ' + blob.name + ' download finished.');

                        if (blobsDownloaded === blobs.length) {
                            // Wait until all workers complete and the blobs are downloaded
                            res.end('\nAll files downloaded');
                        }
                    }
                });
            });
        }
    });
}

Capturas de tela do aplicativo de exemplo, demonstrando como baixar um arquivo do Armazenamento de Blobs.

aplicativo de exemplo, demonstrando como baixar um arquivo do Armazenamento de Blobs

 

aplicativo de exemplo, demonstrando como baixar um arquivo do Armazenamento de Blobs 2

Você pode encontrar blobs baixados em seu computador local

Os especialistas podem saber muito mais detalhes sobre os serviços de Blob do Azure e o Node.  A Microsoft continua a crescer e melhorar o armazenamento de blobs. Esta postagem descreve como começar, abordando os casos base e os módulos de Node.js mais populares para o Armazenamento de Blobs do Azure. Será útil para desenvolvedores de JavaScript que não têm experiência com o Microsoft Azure e desenvolvedores do Azure que têm menos experiência com JavaScript e/ou Node.js.

Os desenvolvedores na plataforma Microsoft Azure devem se familiarizar com o funcionamento do Armazenamento de Blobs do Azure e como lidar com dados não estruturados na nuvem da Microsoft. Saber como o armazenamento de blobs funciona ajudará você a determinar se ele é adequado para seus requisitos específicos.

Você pode baixar o código-fonte do repositório Git.

 node js

If you want more information about how to use Microsoft Azure Storage & Node.js feel free to contact me at mmateev@infragistics.com

Você pode saber mais sobre Node.js, Microsoft Azure e eventos relacionados, como o Azure Bootcamp Bulgaria, se você nos seguir no Twitter @mihailmateev e @ Infragistics e manter contato no Facebook, Google+, LinkedIn e Infragistics Grupo de Usuários de Amigos!

Solicite uma demonstração