2011-01-18 17 views
6

Primera parte de la pregunta:asp.net mvc FileStreamResult

Tengo información en el PP y quiero obtener de db y guardarlo como archivo a .txt cliente.

lo he hecho con asp.net regular. pero en mvc todavía no. Mi información no es una imagen Esta información acerca de los pueblos

vi a This site

Segunda parte de la pregunta:

Quiero descargar el archivo de cliente. No hay problema al descargar un archivo, pero quiero descargar 3 archivos a la vez con 1 solicitud. Pero no se pudo hacer. Entonces decidí crear un archivo zip y generar un enlace. Cuando el usuario haga clic para vincular, se descargará al usuario.

¿Qué le parece? ¿Es bueno hacerlo de esta manera?

Tercera parte de la pregunta: (nuevo)

¿Cómo puedo eliminar los viejos archivos .zip del catálogo éxito después de descarga? o de otra manera. Digamos que con el servicio que se ejecutará en el servidor.

+0

Gracias quién ha editado mi pregunta – AEMLoviji

Respuesta

12

Usted podría tener la siguiente acción del controlador que buscar la información de la base de datos y escribirlo en la secuencia de respuesta que permite al cliente para descargarlo:

public ActionResult Download() 
{ 
    string info = Repository.GetInfoFromDatabase(); 
    byte[] data = Encoding.UTF8.GetBytes(info); 
    return File(data, "text/plain", "foo.txt"); 
} 

y en su opinión proporcionar un enlace a esta acción :

<%= Html.ActionLink("Downoad file", "Download") %> 
+0

sí, lo he comprobado. Pero Encoding.UTF8.GetBytes() acepta cadena como cadena. pero mi resultado de Repository.GetInfoFromDatabase(); no es una cadena simple. puede ser información como FirstName, LastName, Patronymic ... – AEMLoviji

+0

@AEMLoviji, en este caso necesita usar una capa de servicio. Esta capa de servicio invocará su método de depósito y generará una cadena o el formato que desee para enviar la información al cliente desde el modelo. Entonces su controlador llamará al método de la capa de servicio que devolverá la cadena y la transmisión al cliente. –

+0

sí, es simple pero no es una buena manera. creo que si. ¿Hay alguna otra forma de convertir IEnumreable en byte []? – AEMLoviji

3

Puede eliminar el archivo temporal devuelto usando un filtro de acción como este. A continuación, aplique el atributo a su método de acción MVC.

public class DeleteTempFileResultFilter : ActionFilterAttribute 
    { 
     public override void OnResultExecuted(ResultExecutedContext filterContext) 
     { 
      string fileName = ((FilePathResult)filterContext.Result).FileName; 

      filterContext.HttpContext.Response.Flush(); 
      filterContext.HttpContext.Response.End(); 

      System.IO.File.Delete(fileName); 
     } 
    }