2011-01-18 16 views
6

prima parte della domanda:asp.net mvc FileStreamResult

Ho informazioni nel DB e voglio ottenere da db e salvarlo come file da .txt cliente.

L'ho fatto con asp.net regolare. ma in mvc non ancora. Le mie informazioni non sono un'immagine. Questo informazioni su popoli

ho guardato a This site

seconda parte della domanda:

Vorrei scaricare file da client. Non c'è alcun problema quando si scarica un file, ma voglio scaricare 3 file contemporaneamente con 1 richiesta. Ma non poteva essere fatto. Così ho deciso di creare un file zip e generare un collegamento. Quando l'utente farà clic per collegarlo, scaricherà all'utente.

Cosa ne pensi? È bello farlo in questo modo?

terza parte della domanda: (nuovo)

Come posso eliminare i vecchi file .zip dal catalogo dopo successo scaricare? o in un altro modo. Diciamo con il servizio che verrà eseguito sul server.

+0

Grazie chi ha modificato la mia domanda – AEMLoviji

risposta

12

Si potrebbe avere la seguente azione di controllo che scaricherà le informazioni dal database e scriverlo nel flusso di risposta che consente al cliente di scaricarlo:

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

e nella vista fornire un collegamento a questa azione :

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

sì l'ho controllato. Ma Encoding.UTF8.GetBytes() accetta la stringa come stringa. ma il mio risultato da Repository.GetInfoFromDatabase(); non sarà una semplice stringa. può essere info come FirstName, LastName, Patronymic ... – AEMLoviji

+0

@AEMLoviji, in questo caso è necessario utilizzare un livello di servizio. Questo livello di servizio invocherà il metodo del repository e genererà una stringa o qualsiasi formato che si desidera inviare al client dal modello. Quindi il controller chiamerà il metodo del livello di servizio che restituirà la stringa e lo stream al client. –

+0

sì è semplice ma non buono. Penso che sia così. c'è un altro modo per convertire IEnumreable in byte []? – AEMLoviji

3

È possibile eliminare il file temporaneo restituito utilizzando un filtro di azioni come questo. Quindi applica l'attributo al tuo metodo di azione 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); 
     } 
    }