Forzar la descarga de un archivo desde Azure Blob Storage

14/05/2018Artículo original

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.

  FIX: Planes de mantenimiento de SQL Server

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.

  Continuous Delivery en profundidad: pipelines de Jenkins

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!).

  Qué es una API: tipos, usos y funcionamiento

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!

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad