Metadatos de Azure vs. Caracteres Especiales

@lvbernal, quien hace parte de nuestro grupo de MCS, me preguntó acerca de un problema que estaba teniendo en su desarrollo con Windows Azure, al tratar de usar caracteres especiales en los metadatos de los blobs que requería subir a Windows Azure. Le di la guía que lo llevó a la solución y él muy amablemente nos estructuró la solución en este post que he puesto como invitado para su deleite.

image

Nos dice Leonardo:

Estoy desarrollando una aplicación que guarda documentos en Windows Azure y quiero compartir dos decisiones de diseño:

  • No utilizo tablas que relacionen usuarios y documentos, sino que creo un contenedor para cada usuario. Eso me da mayor flexibilidad al momento de hacer transacciones o al eliminar los usuarios (tarea muy frecuente en fase de desarrollo).
  • Los datos asociados al documento como fechas, descripción, etc. los almaceno en los metadatos del blob.

Hay un problema con la última decisión: no se pueden almacenar caracteres especiales en los metadatos. Para solucionarlo, seguí la recomendación de WarNov y utilicé un codificador HTML:

blob.Metadata["Description"] = HttpUtility.HtmlEncode(model.Description);
Description = HttpUtility.HtmlDecode(blob.Metadata["Description"]);

Los nombres de los archivos tampoco pueden contener espacios porque hay navegadores que no los aceptan en las cabeceras de tipo Content-Disposition, necesarias para descargarlos. Yo los reemplazo por "_":

blob.Metadata["FileName"] = HttpUtility.HtmlEncode(file.FileName.Replace(" ", "_"));
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.HtmlDecode(blob.Metadata["FileName"]));

Leonardo Vargas Bernal: Es Ingeniero Telemático de la Universidad Icesi, hace parte del Grupo de Investigación en Informática y Telecomunicaciones i2T, en las áreas de Aplicaciones y servicios móviles, Comunicaciones inalámbricas y Computación ubicua. Microsoft Community Specialist y MSP de 2007 a 2009, ha trabajado con tecnologías como Windows 8, Windows Azure y ASP.NET MVC. Emprendedor y amante de los retos de ingeniería. Encuentren su blog aquí.