IEnumerable per lo streaming per FileStreamResult

Ho un IEnumerable , che è “in streaming” per dichiarazioni di yield di un metodo. Ora voglio convertire questo enumerabile in un Stream per utilizzarlo come risultato in streaming. Qualche idea su come posso farlo?

Quello che voglio infine fare è restituire Stream come FileStreamResult da un’azione del controller ASP.NET. Questo risultato dovrebbe essere trasmesso in streaming come download al client.

Quello che NON voglio fare è scrivere l’intero contenuto IEnumerable nello stream prima di restituire il risultato. Ciò eliminerebbe l’intero senso del concetto di streaming.

Devi creare la tua class ActionResult per ottenere una valutazione pigra. È stato creato un mix di ContentResult una class FileStreamResult per ottenere un comportamento come FileStreamResult con la possibilità di impostare la codifica dei risultati. Un buon punto di partenza è la class astratta FileResult :

 public class EnumerableStreamResult : FileResult { public IEnumerable Enumerable { get; private set; } public Encoding ContentEncoding { get; set; } public EnumerableStreamResult(IEnumerable enumerable, string contentType) : base(contentType) { if (enumerable == null) { throw new ArgumentNullException("enumerable"); } this.Enumerable = enumerable; } protected override void WriteFile(HttpResponseBase response) { Stream outputStream = response.OutputStream; if (this.ContentEncoding != null) { response.ContentEncoding = this.ContentEncoding; } if (this.Enumerable != null) { foreach (var item in Enumerable) { //do your stuff here response.Write(item); } } } } 

Penso che tu possa usarlo in questa prima conversione della stringa in array di byte e utilizzare successivamente lo stram della memoria

 string sourceFile = System.Web.HttpContext.Current.Server.MapPath(Path.Combine("/", "yourAddress")); byte[] byteArray = System.IO.File.ReadAllBytes(sourceFile); MemoryStream mem; using (mem = new MemoryStream()) { mem.Write(byteArray, 0, (int)byteArray.Length); return mem; }