Manejo de Azure Blob Storage mediante el SDK de Azure.

Introducción

La nube de Azure posee una basta cantidad de posibilidades y maneras de trabajar y hacernos más fácil todo a través del cómputo en la nube, una de ellas son los famosos blob storage.

¿Pero entonces que es un blob storage?…

El blob storage de Azure está diseñado para almacenar datos no estructurados, que no tienen una estructura definida. que incluye archivos de texto, imágenes, videos, documentos y mucho más. Una entidad almacenada en el almacenamiento de blobs se denomina blob.

Existen muchas maneras de trabajar un blob storage, en este artículo vamos a desarrollar una forma sencilla de subir contenido ya sea desde un archivo multimedia como una imagen, sonido, vídeo, hasta archivos muy pesados utilizando todo el poder del SDK da Azure.

Qué aprenderás en este artículo:

  1. Conceptos básicos de un blob storage en Azure
  2. Crear un contenedor de blob storage
  3. Conectar una aplicación el C# a Azure mediante su SDK
  4. Subir archivos multimedia mediante el SDK de Azure

Requisitos básicos:

  1. Visual Studio 2019
  2. Una cuenta de Azure (Para esto puedes crear una cuenta nueva sin costo alguno)
  3. .Net Core 5 instalado
  4. Conocimientos básicos de C#
  5. Ganas de aprender

Creación de un contenedor de blob storage

Lo primero que debemos de hacer para poner en práctica este artículo es empezar a preparar todos los recursos necesarios en la nube de Azure pero para ello primero debemos de crear nuestra cuenta de Azure (Creación de una cuenta de Azure – Learn | Microsoft Docs), sí ya la posees entonces ya te puedes saltar este paso e ingresar al portal principal de Azure (https://portal.azure.com) dónde vamos a seleccionar en el botón de hamburguesa en la esquina superior izquierda del portal principal le vamos a dar clic en la primera opción como aparece en la siguiente imagen

Una vez habiendo hecho clic se desplegará una nueva página y vamos a escribir en la barra de búsqueda la palabra blob en sí como se muestra en la siguiente imagen

Al hacer clic nos va a enviar a una nueva página donde va a detallar toda la información relacionada a este recurso dando una introducción los planes de precios uso información soporte y revisiones, así como también una sugerencia de recursos similares al storage account que vamos a crear a continuación le vamos a dar clic al botón crear cómo se muestra en la siguiente imagen

Una vez dado clic en el botón de crear nos va a llevar a una página dónde vamos a empezar a configurar nuestra cuenta de almacenamiento donde el primer valor que nos pide es la suscripción, seleccionamos la suscripción luego el recurso asociado a esa suscripción si no posees un recurso puedes crear uno nuevo dándole al botón debajo de la casilla de texto donde ingresó a ser el recurso dándole a crear nuevo, luego en la sección de detalles de la instancia vamos ahora sí a darle un nombre a nuestra cuenta de almacenamiento para este artículo yo voy a escribir “demostorageazhugh” es de resaltar que el nombre de la cuenta de almacenamiento debe ser con letras minúsculas y el nombre que le vamos a dar debe de ser aceptado por Azure como tal como paso siguiente vamos a seleccionar la región en este caso yo voy a seleccionar “US South Central US” como último paso vamos a seleccionar el performance y la redundancia para este demo vamos a dejarlo en sus valores predeterminados y vamos a seleccionar el botón de revisar y crear como se muestra todo en la siguiente imagen

Una vez que la validación de toda esta configuración que hemos generado ha sido exitosa simplemente lo que hacemos es darle al botón de crear como se muestra en la siguiente imagen

Luego de esperar aquel recurso este creado vamos a ir ahora a acceder a él dándole clic en el botón ir al recurso

Ya accediendo a la página donde nos muestra el recurso que acabamos de generar nos vamos a ir a la sección de data storage en el menú izquierdo vamos a ver una sección que se llama contenedores y vamos a crear un nuevo contenedor dándole clic en el símbolo de más como se muestra en la siguiente imagen

Luego vamos a ir a una ventana que se despliega del lado derecho donde vamos a escribir el nombre del contenedor dónde vamos a almacenar nuestros archivos blog para ello vamos a determinar un nombre en minúscula y que éste sea aceptado por Azure como tal luego en la siguiente sección vamos a ver los niveles de accesos de este contenedor para ello vamos a seleccionar la segunda opción para este artículo como tal de manera de poder darle salida pública a los archivos que más adelante vamos a subir y que puedan ser tanto consumidos tanto leídos como subidos de manera dinámica a través del SDK de Azure, las demás opciones las dejamos como están predeterminadas y hacemos clic en el botón crear

Para asegurarnos que los archivos que vamos a subir se puedan ver de manera correcta a través de una URL de Azure vamos a subir un archivo directamente dándole clic al botón de subir seleccionamos el archivo y luego le damos al botón de subir, luego de subir el archivo vamos a seleccionar el mismo y nos va a aparecer una ventana o una página donde explicara el detalle directamente de todo lo relacionado a ese archivo en sí hay un una propiedad que se llama URL que es donde vamos a copiar ese valor y lo vamos a pegar en el navegador directamente para ver si ya podemos acceder al contenedor en sí como se muestra en las siguientes imágenes

De esta manera ya podemos acceder a nuestros archivos públicamente desde cualquier navegador y ya podemos pasar a generar la aplicación para realizar el consumo ya sea de subida o de descarga de nuestros archivos blob.

Generar la aplicación de consola en visual Studio 2019

Para seguir continuando con el desarrollo de este artículo vamos a abrir visual Studio 2019, luego vamos a ir a la primera ventana de diálogo que nos ofrece visual Studio y vamos a seleccionar la opción de crear un nuevo proyecto como se muestra en la siguiente imagen

Luego nos vamos a ir a la barra de búsqueda y vamos a escribir consola luego esta nos va a filtrar los tipos de aplicaciones soportadas en visual Studio y vamos a seleccionar la primera opción que nos filtra lo cual se llama console application, nótese que existen varios tipos de aplicaciones con el mismo nombre lo único que varía es el tipo del lenguaje y plataforma en la que van a ser configurados y preparados en el entorno de Visual Studio para fines de este ejemplo vamos a trabajar con C# por lo tanto vamos a seleccionar el proyecto correspondiente a la plataforma de desarrollo de C# y .Net Core como se muestra en la siguiente imagen

Le hacemos clic al botón siguiente y nos aparecerá una siguiente ventana en donde vamos a especificar el nombre del proyecto la ubicación del proyecto y vamos a seleccionar nuevamente el botón de siguiente

Luego nos aparecerá información adicional del framework que vamos a utilizar de desarrollo para este caso vamos a seleccionar .Net 5.0 y vamos a hacer clic en el botón crear como se muestra en la siguiente imagen

Hasta este punto ya tenemos configurado el almacenamiento en la nube tenemos los permisos necesarios y ya tenemos nuestra aplicación de consola creada en el entorno de visual Studio 2019.

Instalar y configurar el SDK de Azure

Para instalar el SDK de Azure nuestra solución previamente creada de consola para poder ya sea consumir archivos a través de una descarga, así como colocar o subir estos objetos hacia un contenedor de blogs storage sencillamente lo que hacemos es que damos clic derecho en el proyecto y seleccionamos la opción de manejar los paquetes de NuGet tal como se muestra en la siguiente imagen

Una vez seleccionada la opción nos va a mostrar del lado izquierdo una pestaña donde se va a mostrar el administrador de paquetes de NuGet dónde vamos luego a seleccionar y escribir en la barra de búsqueda de Azure. Storage. Blogs y vamos a seleccionar la primera opción y hacer clic en el botón instalar tal como se muestra en la siguiente imagen

Una vez realizado bien este paso ya podemos trabajar directamente con el SDK de Azure ya solamente nos queda ir de nuevo al portal de Azure y traernos la configuración correspondiente.

Implementación de la solución

Para empezar a consumir el SDK de Azure vamos a realizar un ejercicio de descarga del archivo que probamos al crear el contenedor de blob storage en Azure, luego hacer una subida de una nueva imagen y por último vamos a listar los archivos que ya existen en el contenedor de blob storage para confirmar que existe ya arriba en la nube.

Como primer paso a implementar vayámonos de nuevo al portal de Azure y vamos a ir a la sección del storage account que ya habíamos generado y vamos a ir a la sección de seguridad y hacemos clic en la opción Access keys como se muestra en la siguiente imagen

A continuación, nos abrirá una nueva pagina donde se mostrarán las llaves de acceso y rotación, así como algunos datos relevantes conformes a la seguridad de estas llaves, vamos a hacer clic en la primera opción para mostrar las llaves que a primera vista estarán ocultas y poder copiar la información, para este articulo vamos a copia el Connection String, yo tome la primera llave, pero sin problemas puedes tomar cualquiera de las dos como se muestra a continuación en la siguiente imagen

Esta información del connection string es necesario traérnosla a nuestra aplicación y vamos a crear una variable donde vamos a pegar esta cadena de conexión y también necesitamos el nombre del contenedor que nombramos al crear la cuenta de almacenamiento en este caso le llamamos “demoshugh”, estos dos valores son importantes para poder acceder mediante el SDK de Azure a estos recursos en la nube.

static string storageconnstring = "<Aqui va el connection string>";
static string containerName = "demoshugh";
static string fileToDownload = "azure.png";
static string fileToUpload = "azurelogo.png";
static string filepath = @"C:\DemoFiles\";

además de esos 2 valores crearemos 3 variables mas donde vamos a definir en la variable fileToDownload al nombre del archivo que ya esta arriba en el contenedor de blob, la variable fileToUpload que se refiere al valor del nombre del archivo que esta localmente en el pc y queremos subir a ese contenedor de blob, y por último la variable filePath que es la ruta donde ya esta el archivo a subir y también va a servir para descargar el archivo que tenemos arriba en dicho contenedor de blob.

Se necesitan inicializar los objetos de BlobServiceClient donde vamos a pasar la variable de storageconnstring y también vamos a especificar el nombre del contenedor mediante la función dentro del blobServiceClient llamada GetBlobContainerClient y le pasamos el nombre de la variable containerName

private static void InitializeBlob()
{
   try
   {
     blobServiceClient = new BlobServiceClient(storageconnstring);
     containerClient = blobServiceClient.
                       GetBlobContainerClient(containerName);
   }
   catch (Exception)
   {  
     throw;
   }            
}

Vamos a implementar el método DownloadBlob donde vamos a especificar con el uso del SDK de Azure que archivo queremos descargar y guardar en nuestro pc de la siguiente manera mediante el siguiente fragmento de código fuente a continuación.

private static async Task DownloadBlob()
{
   try
   {                
      BlobClient blobClient = containerClient.GetBlobClient(fileToDownload);
                
      //Download data content of blob and copy to the disc
      using FileStream stream = File.Create(filepath + fileToDownload);
      var result = await blobClient.DownloadToAsync(stream);

      if (result.Status > 200 || result.Status < 300)
      {
         Console.WriteLine("File downloaded sucessfully!");
         return;
      }

      Console.WriteLine("Error to download file!");
      }
   catch (Exception)
   {
      throw;
   }
}

¡Ya creamos el método para descargar un elemento del contenedor de blob, vamos bien no! ahora procederemos a crear el método UploadBlob donde vamos a subir el archivo que tenemos en nuestro equipo para almacenarlo en el contenedor de blob storage como se muestra en el siguiente fragmento de código.

private static async Task UploadBlob()
{
  try
  {                
    BlobClient blobClient = containerClient.
                            GetBlobClient(fileToUpload);
    var result = await blobClient.
                 UploadAsync(filepath + fileToUpload, true);

    if (result.GetRawResponse().Status == 201)
    {
      Console.WriteLine("File uploaded sucessfully!");
      return;
    }

    Console.WriteLine("Error to upload file!");
  }
  catch (Exception)
  {
    throw;
  }
}

Una vez ya creado el método para descargar una imagen, así como también un método para subir una imagen, para asegurar que todos los elementos existen en nuestro contenedor vamos a crear un método para listar u obtener los ítems o archivos guardados en el contenedor mediante el siguiente fragmento de código a continuación.

private static void ListBlobs()
{
  try
  {
    Console.WriteLine($"List of all items in blob {containerName} container");
    Console.WriteLine("------------------------------");
    // Print out all the blob names
    foreach (BlobItem blob in containerClient.GetBlobs())
    {
       Console.WriteLine(blob.Name);
    }
  }
  catch (Exception)
  {
     throw;
  }
}

Ahora juntemos todas las piezas en el punto inicial de la aplicación en el método Main de la aplicación de consola.

        static void Main(string[] args)
        {
            InitializeBlob();
            DownloadBlob().Wait();
            UploadBlob().Wait();
            ListBlobs();
        }

Y de esta manera compilamos y ejecutamos la aplicación, para ver mas detallado todo el proceso es recomendable ejecutar la aplicación aplicando breakpoints en cada método para que veas más detenidamente el flujo de la aplicación.

Conclusión

De esta manera ya como lo vimos en los pasos anteriores podemos demostrar de una manera rápida el aprovechamiento de este SDK de Azure para manejar un contenedor de almacenamiento blob dinámicamente ya sea para subir elementos a ese contenedor como también poder descargar directamente ya sea agregándole una solución de base de datos donde le podríamos guardar la información que esto se genera a través de una ruta o URL  generada en el blob storage como una buena práctica para el manejo de los contenidos multimedia o contenidos de archivos en nuestras aplicaciones.

La nube de Azure posee una gran cantidad de recursos y herramientas que cualquier desarrollador puede sencillamente manejar desde una consola de comandos pasando por un SDK así como también su uso interactivo directamente mediante su portal web, Para una mejor gestión de la información y los recursos que queramos trabajar en la nube ya sea desde una base de datos a una máquina virtual o simplemente un guardado de información relevante para poder utilizarse en cualquiera de nuestras aplicaciones.

UPDATE «Novedades liberadas desde Octubre 2012 SDK»

Entre las nuevas cosas que nos viene ahora en esta actualizacion mencionare las mas destacadas y muy utiles para nosotros los desarrolladores.

1) El stream de infrarrojos está ahora expuesto en el API

El sensor Kinect está ahora expuesto como un formato de color de la imagen nueva. Usted puede utilizar el flujo de infrarrojos en muchos escenarios, tales como:

  •      Calibración de otras cámaras de color para el sensor de profundidad de Kinect
  •      La captura de imágenes en escala de grises en situaciones de poca luz
  •      Dos muestras de infrarrojos se han añadido a la caja de herramientas, y también se puede probar de infrarrojos en KinectExplorer. Esto proporciona a los desarrolladores un amplio espectro de escenarios de pruebas.
  •      Tenga en cuenta que el sensor no es capaz de capturar flujos de infrarrojos y corrientes de color al mismo tiempo. Puede, sin embargo, capturar flujos de infrarrojos y la profundidad simultáneamente.

2) Datos profundidad ampliados 

  • CopyDepthImagePixelData() ahora proporciona detalles más allá de 4 metros, por favor, tenga en cuenta que la calidad de los datos se degrada con la distancia. Además de los datos de profundidad extendidos, facilidad de uso de la profundidad del API de datos ha sido mejorada (enmascaramiento de bits ya no se requiere).
  • Esto significa que las aplicaciones serán capaces de leer los datos más allá de 4 metros cuando sea necesario.
3) Configuracion de color en la APIs de la Cámara

  • Los ajustes de color de la cámara ahora puede ser optimizado para su entorno.
  •      Ahora se puede ajustar el balance de blancos, contraste, tono, saturación y otros parámetros, dando una mejor imagen de color para cada usuario individual.
  •      Para ver la lista completa de los ajustes que se pueden optimizar, inicie el Explorador de Kinect desde el navegador Developer Toolkit y revisar la exposición y controles de color.

4) API de datos Acelerómetro

  • Los datos de los acelerómetros del sensor se expone ahora en la API. Esto permite la detección de la orientación del sensor.

5) Nueva API de conversión de coordenadas espacio

  • Existen varias APIs nuevo para convertir datos entre espacios de coordenadas: el color, la profundidad y el esqueleto.
  • Hay dos conjuntos de API: uno para la conversión de los píxeles individuales y la otra para la conversión de un cuadro de imagen completa.
  • Más allá de mejorar la facilidad de uso, este soporta la funcionalidad adicional mapeo de coordenadas previamente no disponibles para los desarrolladores.

6) Kinect Studio 1.6.0

  • Kinect Studio ha sido actualizado para soportar los rayos infrarrojos, raw bayer, datos extendidos de profundidad, y cuenta con acelerómetro.

7) Raw Bayer

  • El nuevo formato de color de imagen raw Bayer que permite hacer tu propia Bayer RGB conversiones de unidades de procesamiento central (CPU) o unidades de procesamiento gráfico (GPU). Esto permite a los desarrolladores elegir una calidad de conversión superior a RGB de Bayer que nuestro SDK proporciona de forma predeterminada.

Si no tienes la minima idea de que es un Bayer, para los que saben de fotografia tambien pueden refrescar su memoria con estos breves conceptos http://es.wikipedia.org/wiki/Mosaico_de_Bayer

Ademas de las amplias funciones destacadas en la nueva actualizacion tambien estan incluidos nuevos soportes de herramientas y compatibilidad en el sistema operativo Windows 8

Soporte para máquinas virtuales
El sensor Kinect para Windows ahora funciona en Windows que se ejecutan en una máquina virtual (VM) y ha sido probado con los siguientes entornos de VM:

  •      Microsoft HyperV
  •      VMWare
  •      paralelas

Esto amplía enormemente la utilidad de la Kinect para Windows SDK, ya que ahora se puede utilizar en cualquier máquina cuyo sistema operativo nativo admite que ejecuta Windows en uno de los paquetes VM mencionadas anteriormente. Además, esto permite varios escenarios de desarrollo, tales como ciertos enfoques de prueba automatizados.

Actualización Kinect Studio
La actualización simplifica la depuracion y comprobación de las aplicaciones mediante el uso de Kinect Studio para grabar, reproducir y depurar los datos de Kinect. Esta versión se ha actualizado para admitir los nuevos infrarrojo, crudo Bayer, datos extendidos de profundidad, y cuenta con acelerómetro.

Soporte para Windows 8
Al utilizar el Kinect para Windows SDK, puede desarrollar una aplicación Kinect para Windows para una aplicación de escritorio en Windows 8.

Soporte para Visual Studio 2012
El SDK es compatible el desarrollo con Visual Studio 2012, además con el soporte de Visual Studio 2010, y el nuevo Microsoft. NET Framework 4.5, además de los ya soportados. NET Framework 4.0. y el ya mencionado soporte para Windows 8