¿Qué es Azure Blob Storage?

Blob Storage es un servicio para almacenar grandes cantidades de datos de objetos no estructurados, como texto o datos binarios(principalmente imagenes y videos). Puede usar Blob Storage para exponer datos públicamente al mundo, o para almacenar datos de aplicaciones de forma privada.

Dicho esto, en el presente post vamos a aprender a almacenar y eliminar imágenes en Azure Blob Storage y poder consumirlas en una aplicación ASP.NET mvc . En la aplicación visualizaremos todas las imágenes de nuestro contenedor en una tabla, y tendremos un enlace para poder eliminar cada una de las imágenes individualmente.

Lo primero que debemos realizar es crearnos una cuenta de almacenamiento en Azure.

Cuenta almacenamiento

En la captura muestro como configurar la cuenta de almacenamiento, donde prueba12 es el nombre de la cuenta de almacenamiento.

Si todos los datos siguientes han sido validados con éxito, deberiamos ver:

cuenta almacenamiento crear

Si nos aparece esto, debemos pulsar en el boton de crear y esperar a que termine.

Si tiene alguna duda pulsa en la explicacion oficial de microsoft: https://docs.microsoft.com/es-es/azure/storage/common/storage-quickstart-create-account?tabs=azure-portal

Después, necesitamos crearnos dentro de nuestra cuenta de almacenamiento un contenedor, en el cual guardaremos las imágenes. Para ello, debemos entrar en nuestra cuenta de almacenamiento y pulsar sobre blobs.

blobs

Una vez ahi debemos pulsar en +Contenedor y crear nuestro contenedor.

nuevo contenedor
Este nombre de contenedor luego lo usaremos en nuestra app.

Nos saldra un cuadro de texto donde pondremos el nombre del contenedor.

nombrecontenedor

Importante: si queremos que se vean las imágenes en nuestra pagina(que es el caso), debemos poner el nivel de acceso público.

Por último debemos acceder a nuestra clave, así podremos tener acceso a todos los contenedores que tengamos creados en nuestra cuenta de almacenamiento.Para ello vamos a nuestra cuenta de almacenamiento y pulsamos sobre claves de acceso.

claves
Debemos copiar la segunda ya que es la cadena de conexión

Una vez finalizado esto, debemos abrir Visual Studio y crear un nuevo proyecto ASP.NET MVC Framework.

nuevo proyecto
En browse alegimos donde guardar el proyecto

Marcamos la opcion MVC y pulsamos en OK.

mvc

Lo primero de todo es descargar los paquetes Microsoft.WindowsAzure.ConfigurationManager y WindowsAzure.Storage.

nuget configurationmanager
nuget storage

Después nos dirigiremos a establecer la conexion con nuestra cuesta de azure de almacenamiento. Para ello debemos ir al Web.config y en el apartado de appSettings añadir nuestra cadena de conexion con nuestra clave. La key puede tener el nombre que deseemos.

webconfig
La ultima es la que añadimos

Luego sobre Models, deberemos crearnos la clase imagen, con las propiedades nombre y url.

public class Imagen 
{
public String Nombre { get; set; }
public String UrlImg { get; set; }
}

Esta la clase la usaremos para guardar los datos de las imágenes en una lista de la clase.(List<Imagen>).

Modificamos la vista Index que viene por defecto:

index
Index de la aplicacion.

En este código, como hemos explicado antes, tendrá un formulario con un campo para seleccionar un fichero y un botón para subir el fichero seleccionado.

También la vista recibe una lista de imágenes, en caso de contener imágenes nuestro contenedor, creará una tabla con todas las imágenes. En caso de que sea null no pintará la tabla.

Después debemos ir a nuestro HomeController y para crear la funcionalidad de subir imagenes a Azure.

Antes de escribir nada añadimos los using:

 using Microsoft.Azure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;

Y este es el código del HomeController:

public class HomeController : Controller
{
List imglist = new List();
public ActionResult Index(String nombre)
{
String keys = CloudConfigurationManager.GetSetting("ConexionBlobs");
//nombre de la key de appsettings
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(keys);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("imagenes");
//nombre de nuestro contenedor que hemos creado dentro de nuestra cuenta
if (nombre != null)
{
CloudBlockBlob blockBlob = container.GetBlockBlobReference(nombre);
blockBlob.Delete();
}
foreach (IListBlobItem item in container.ListBlobs(null, true))
{
if (item.GetType() == typeof(CloudBlockBlob))
{
CloudBlockBlob blob = (CloudBlockBlob)item;
Imagen img = new Imagen();
img.Nombre = blob.Name;
img.UrlImg = blob.Uri.AbsoluteUri;
imglist.Add(img);
}
}
return View(imglist);
}
[HttpPost]
public ActionResult Index()
{
var file = Request.Files[0];
if (file != null && file.ContentLength > 0)
{
String keys = CloudConfigurationManager.GetSetting("ConexionBlobs");
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(keys); CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference("imagenes");
CloudBlockBlob blockBlob = container.GetBlockBlobReference(file.FileName); blockBlob.UploadFromStream(file.InputStream);
}
return RedirectToAction("Index");
}
}
}

En el codigo, lo que hacemos nada mas cargar la pagina, es crear la cuenta de almacenamiento a traves de las claves que hemos configurado en el Web.config, y crear también la referencia nuestro contenedor.

Teniendo el contenedor, ya tenemos acceso a todos las imágenes que estén es él. Por lo que recorremos todo el contenedor y envío a la vista una lista de imágenes.

En caso de que el nombre sea distinto de null eliminaremos la imagen que corresponda con dicho nombre.

Y por último en el método HttpPost, capturo el fichero que haya seleccionado para guardarlo en Azure. Me creo la conexión otra vez y lo subo mediante el método UploadFromStream.

Y ya podemos probar la aplicación:

aplicacion
Carga los productos del contenedor si tiene.

Esto seria todo lo necesario para poder eliminar y almacenar las imágenes en Azure. A continuación os dejo el enlace del código la aplicación por si tienen alguna duda.

Autor: Marcos Molano Soriano

Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin

Centro: Tajamar

Año académico: 2018-2019

Código: https://github.com/MarcosMolano/BlobStorage

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.