Hoy un truco rápido pero muy útil en ciertas ocasiones.

Azure Blob Storage nos permite almacenar archivos de todo tipo accesibles desde la Web a un coste ridículo y con altas prestaciones de velocidad y ancho de banda. Es una buena manera de poner a disposición de la gente todo tipo de archivos, especialmente si son grandes, de modo que si se descargan mucho no acaparen el ancho de banda del servidor de nuestra web, por ejemplo.

Si por ejemplo subimos imágenes o vídeos, lo habitual es que queramos que se descarguen bajo demanda, mostrándose en el navegador. De este modo los enlazamos desde una web, como recursos de la página, y se obtienen desde Azure, que actúa como una especie de caché externa para no ocuparnos ancho de banda.

Sin embargo, a veces querremos que si alguien usa la dirección del recurso en Azure de manera directa, que en lugar de abrirse en el navegador se le descargue el archivo al disco duro. Un ejemplo: un archivo PDF que queremos que se puedan descargar.

Si subimos a Azure Storage un PDF, cuando lo enlacemos se descargará y se abrirá directamente en el navegador. Si preferimos que no sea así y que directamente pregunte al usuario dónde se lo quiere descargar en el disco duro ¿cómo podemos conseguirlo?

Cabeceras de disposición del contenido

La diferencia entre un archivo que se ve en el navegador y uno al que se fuerza la descarga es tan solo una cabecera que devuelve el servidor y que se llama Content-Disposition. Si en esta cabecera ponemos el valor attachment le estamos indicando a los navegadores que queremos que el archivo se descargue. Además le podemos indicar el nombre que le queremos dar a dicho archivo si le añadimos la propiedad filename. Algo así:

content-disposition: attachment;filename=MiArchivo.pdf

O sea, que en realidad lo único que necesitamos es añadir esta cabecera a nuestro archivo. Pero ¿es posible hacerlo?

Hace ya unos años (a finales de 2012) Microsoft añadió a azure la posibilidad de establecer cabeceras personalizadas a los archivos que se almacenaban en Blobs. Lamentablemente la única manera de hacerlo, incluso hoy en día, es mediante código. Es decir, no hay una manera desde el portal de Azure de establecerlas manualmente. Una pena y una dejadez por parte de Microsoft en mi opinión.

Sin embargo hay una manera rápida y sencilla de hacerlo utilizando una herramienta externa. Se trata de la indispensable Azure Storage Explorer, una app gratuita y multi-plataforma de la propia Microsoft, que permite gestionar de manera rápida y sencilla todo el almacenamiento que tenemos en Azure.

En esta herramienta, si navegas hasta tu Blob y pulsas sobre el botón de "Propiedades":

se abre un cuadro de diálogo en el que, entre otras cosas, te permite establecer algunas cabeceras comunes para el archivo. Ente ellas, por suerte, está la de la disposición del contenido, como podemos ver en esta figura:

En este caso le indico que sea un archivo para descarga y además le cambio el nombre original para que, por defecto, el que nos ofrezca en el cuadro de diálogo sea el que me interese.

También podemos cambiar otras cabeceras comunes como por ejemplo el tipo de caché que queremos que se haga del archivo, la codificación de éste, el idioma o incluso el tipo MIME que le queramos asociar (¡podríamos mentir!).

Gracias a esta herramienta podemos obtener un mayor control sobre el comportamiento de los archivos que almacenemos en Azure Blob Storage.

¡Espero que te sea útil!

 

¿Este post te ha ayudado?, ¿has aprendido algo nuevo? Entonces, me niego a creer que no puedas donar ni 1€ a los que necesitan algo tan básico como comer. Por cada euro que pongas tú, yo pondré otro.
¡No pases de ellos! También es tu responsabilidad.
Vamos a ayudarlos juntos