Conseguirlo es muy sencillo, y para ello no tenemos más que "engañar" al navegador y decirle que lo que se está descargando no es un Excel, PDF o Word en particular, sino que se trata de una serie de bytes que se tiene que bajar sin rechistar

El siguiente código hace esa función:
public static void descarga(string filepath, string filename)
{
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
Response.Flush();
Response.WriteFile(filepath);
Response.End();
}
Esta función se puede ejecutar desde donde queramos (lo típico es llamarlo cuando el usuario presiona un botón). básicamente, lo que hace es:
1.- Limpia el contenido de salida.
2.- Le cambia el contentType a tipo octet... aquí es donde "engañamos al navegador".
3.- Le añadimos la cabecera Content-Disposition y le damos un nombre al fichero. Esto es opcional, y lo que hace es dar el nombre que queremos que aparezca si el usuario decide guardar el fichero.
4.- Manda la info que tenemos hasta ahora (la única cabecera que hemos añadido) a la salida hacia el usuario.
5.- Mandamos el fichero en sí desde Response.WriteFile(filepath), donde, obviamente, filepath es el path interno del fichero en nuestro servidor.
6.- Enviamos todo y terminamos la ejecución de la página.
No hay comentarios:
Publicar un comentario