Bajar ficheros aunque estén asociados a un programa

Hay muchos ficheros que bajamos de un servidor web y que no podemos guardar, automáticamente se abre su programa asociado. Pues bien, si añadimos lo siguiente en nuestro .htaccess de nuestro servidor Apache

AddType application/octet-stream .avi

AddType application/octet-stream .mpg

AddType application/octet-stream .mov

AddType application/octet-stream .pdf

Otra solución sería la siguiente (para ASP/ASP.NET y IIS)

Response.AddHeader("content-disposition","attachment; filename=" & fi.Name)

Si añadimos esta cabecera a un fichero, el navegador que usemos antes de descargalo nos pregunta si deseamos abrirlo o guardarlo en disco.

Si le damos a abrirlo, el navegador se lo baja, y desde un directorio temporal ejecuta el archivo. Esto es muy interesante si queremos que el fichero solo lo puedan bajar los usuarios autorizados de nuestra web... pero lo explico mejor...

Hay ciertas extensiones que el navegador deja manejar a programas externos, es decir, cuando se baja algún fichero con cierta extensión, el navegador simplemente le dice al programa con que está asociada esa extensión que tiene que abrir una dirección web. El problema es si para acceder a esa dirección es necesario hacer login es probable que el programa no pueda descargarla correctamente.

Para eso uso el siguiente truco. Gracias a él le estoy indicando al navegador que en vez de pasarle la URL al programa y que sea el programa el que se encargue de descargar el fichero, quiero que sea el navegador el que se descarga el fichero, y lo guarde en un temporal y después se lo pase al programa. Así no tendré ningún problema de usuarios y passwords porque el navegador entiende perfectamente el sistema para validar los usuarios que nos venga en gana.