Descarga de archivos con ASP.NET MVC

Típicamente nuestros controladores ASP.NET MVC tienen acciones que retornan datos al usuario, pero puede pasar que el resultado de una operación sea un archivo que el usuario va a descargar en el navegador. Vamos a ver a continuación cómo hacerlo en ASP.NET MVC.

En realidad el tema es muy simple y ASP.NET MVC nos facilita mucho este trabajo, ya que lo único que debemos hacer es retornar un objeto de tipo FileResult en la acción requerida del controlador MVC. Vamos a ver a continuación un ejemplo de esto creando el contenido de un archivo .txt en memoria.

public FileResult Download()
{
    // Obtener contenido del archivo
    string text = "El texto para mi archivo.";
 
    return File(Encoding.ASCII.GetBytes(text), "text/plain""Prueba.txt");
}

Nótese que en este primer caso usamos un arreglo de bytes para generar el archivo. También podría darse el caso donde tengamos un Stream, y también podemos generar un FileResult a partir de este, por ejemplo:

public FileResult Download()
{
    // Obtener contenido del archivo
    string text = "El texto para mi archivo.";
    var stream = new MemoryStream(Encoding.ASCII.GetBytes(text));
 
    return File(stream, "text/plain""Prueba.txt");
}

Esto mismo que vimos anteriormente puede ser aplicado con cualquier archivo: creando un excel, una imagen, enviando un archivo obtenido desde el disco del servidor, etc.

Para ver en acción el funcionamiento de este action method, basta con agregar un ActionLink en la vista Razor donde deseamos que se invoque la descarga del archivo:

@Html.ActionLink("Descargar usando ActionLink""Download""Home")

Otra opción que tenemos es hacerlo con Javascript (en este caso generando la URL al action method usando la clase UrlHelper).

<a id="download" href="#" onclick="downloadFile();return false;">Descargar usando javascript</a>
 
<script>
    function downloadFile()
    {
        window.location = "@Url.Action("Download""Home")";
    }
</script>

Y bien, hasta acá este artículo, espero que les pueda ser útil. El código completo del ejemplo funcionando puede ser encontrado junto al código de otros posts en mi repositorio de Github.

¡Hasta una próxima!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: