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.
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

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.


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.



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.

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!