martes, 19 de febrero de 2013

Metadatos de Azure vs. caracteres especiales

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"]));

No hay comentarios.:

Publicar un comentario