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:
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 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"]));
Comentarios
Publicar un comentario