Cómo administrar Microsoft Azure Blob Storage con Node.js
Aprenderá a empezar con Node y Blob Storage, cubriendo los casos más frecuentes.
Node.js es una de las plataformas de crecimiento más populares para el desarrollo. El lenguaje que se utiliza con Node.js es JavaScript, el lenguaje #1 más utilizado en GitHub, y esta tendencia solo va a aumentar (Forbes, 14 de julio de 2014).
Microsoft Azure Blob Storage
Los servicios de almacenamiento de Microsoft Azure nos permiten almacenar/recuperar los datos NO RELACIONALES a/desde el entorno de la nube de Windows. En Microsoft Azure Storage, los datos se pueden almacenar en 4 formatos diferentes (v.i.z. Blobs, Tablas y colas, Almacenamiento de archivos (en versión preliminar).
¿Qué es una mancha?
Azure Blob Storage es un servicio para almacenar grandes cantidades de datos no estructurados a los que se puede acceder desde cualquier parte del mundo a través de HTTP o HTTPS. Un solo blob puede tener cientos de gigabytes de tamaño.
El servicio Blob contiene los siguientes componentes:
Cuenta de almacenamiento: Todo el acceso a Azure Storage se realiza a través de una cuenta de almacenamiento.
Contenedor: Un contenedor proporciona una agrupación de un conjunto de blobs. Todos los blobs deben estar en un contenedor. Una cuenta puede contener un número ilimitado de contenedores. Un contenedor puede almacenar un número ilimitado de blobs.
Blob: Un archivo de cualquier tipo y tamaño. Hay dos tipos de blobs que se pueden almacenar en Azure Storage: blobs en bloques y en páginas. La mayoría de los archivos son blobs en bloques. Un solo blob en bloques puede tener un tamaño de hasta 200 GB. En este tutorial se usan blobs en bloques. Los blobs en páginas, otro tipo de blob, pueden tener un tamaño de hasta 1 TB y son más eficaces cuando los intervalos de bytes de un archivo se modifican con frecuencia.
Blob significa 'objeto binario grande', que es una matriz de bytes sin procesar. En la ilustración siguiente se muestra la estructura jerárquica utilizada para el almacenamiento de blobs en Windows Azure:

La cuenta de almacenamiento de Azure puede tener varios contenedores. Un contenedor se puede considerar como una matriz o colección de uno o varios blobs. Además, cada blob puede tener una o varias propiedades de metadatos para definir de qué se trata el contenido del blob. Las propiedades de metadatos son una colección de cadenas Nombre-Valor.
Como se mencionó anteriormente, se puede acceder al contenido de cada Blob en Microsoft Azure navegando por su URI (REST) correspondiente. El URI suele tener el siguiente formato:
https://<Account>.blob.core.windows.net/<Container>/<BlobName>
¿Cómo usar Blob Storage y Node.JS?
Puede usar diferentes paquetes de NodeJS para controlar Azure Blob Storage. En esta publicación, cubriremos el paquete azure Node (un SDK oficial de Microsoft Azure).
Microsoft Azure SDK for Node.js
El SDK oficial de Microsoft Azure (npm page: https://www.npmjs.org/package/azure, homepage: http://github.com/WindowsAzure/azure-sdk-for-node) para Node.js. proporciona un paquete Node.js que facilita el consumo y la administración de los servicios de Microsoft Azure.
En los fragmentos de código que se enumeran a continuación se muestra cómo administrar Azure Blob Service mediante el SDK de Microsoft Azure para Node.js.
Create an Azure Blob Service
Puede crear Azure Blob Service mediante las variables de entorno para almacenar las credenciales de la misma manera que para Azure Table Service.
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
Un enfoque es utilizar un módulo de nodo multipartito. Es un analizador de datos multiparte/formulario que admite la transmisión. Podemos acceder a los datos multiparte usando Multiparty (npm install multiparty), una bifurcación de Formidable. Este módulo no transmitirá el archivo al disco a menos que usted se lo indique.
// 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
En las pantallas siguientes se muestra cómo cargar archivos en Azure Blob Storage mediante la aplicación de demostración de ejemplo.


Descargar archivos de Azure Blob Storage
Para descargar el blob y escribirlo en el sistema de archivos, se pueden usar métodos getBlob o getBlobToFile similares.
El siguiente recorte muestra cómo 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]'));
El código siguiente es parte de la aplicación de demostración, que muestra cómo descargar archivos de Azure Blob Storage mediante 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, utilizada en el código anterior:
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 pantalla de la aplicación de ejemplo, en las que se muestra cómo descargar un archivo de Blob Storage.



Los especialistas pueden obtener muchos más detalles sobre los servicios y Node de Azure Blob. Microsoft sigue creciendo y mejorando el almacenamiento de blobs. En esta publicación se describe cómo empezar, cubriendo los casos base y los módulos de Node.js más populares para Azure Blob Storage. Será útil tanto para los desarrolladores de JavaScript que no tienen experiencia con Microsoft Azure como para los desarrolladores de Azure que tienen menos experiencia con JavaScript y/o Node.js.
Los desarrolladores de la plataforma Microsoft Azure deben familiarizarse con el funcionamiento de Azure Blob Storage y cómo controlar los datos no estructurados en la nube de Microsoft. Saber cómo funciona el almacenamiento de blobs le ayudará a determinar si es una buena opción para sus requisitos particulares.
Puede descargar el código fuente del repositorio Git.

If you want more information about how to use Microsoft Azure Storage & Node.js feel free to contact me at mmateev@infragistics.com
Puede obtener más información sobre Node.js, Microsoft Azure y eventos relacionados como Azure Bootcamp Bulgaria si nos sigue en Twitter @mihailmateev y @ Infragistics y mantenerse en contacto en Facebook, Google+, LinkedIn y Infragistics grupo de usuarios de amigos.