mvc files descargar asp archivo c# .net asp.net-mvc stream ienumerable

c# - descargar - IEnumerable<cadena> a Stream para FileStreamResult



save file asp mvc (2)

Tengo un IEnumerable<string> , que es "transmitido" por declaraciones de yield de un método. Ahora quiero convertir este enumerable en un Stream para usarlo como resultado transmitido. ¿Alguna idea de cómo puedo hacer esto?

Lo que finalmente quiero hacer es devolver Stream como FileStreamResult desde una acción de controlador ASP.NET. Este resultado debe transmitirse como descarga al cliente.

Lo que NO quiero hacer es escribir todo el contenido de IEnumerable en la transmisión antes de devolver el resultado. Esto eliminaría todo el sentido del concepto de transmisión.


Creo que puedes usarlo en esto primero convierte tu cadena a matriz de bytes y usa memoria stram luego

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; }


Debes crear tu clase ActionResult para lograr una evaluación diferida. Ha creado una combinación de ContentResult y clases FileStreamResult para lograr un comportamiento como FileStreamResult con la capacidad de establecer la codificación de resultados. Un buen punto de partida es la clase abstracta FileResult :

public class EnumerableStreamResult : FileResult { public IEnumerable<string> Enumerable { get; private set; } public Encoding ContentEncoding { get; set; } public EnumerableStreamResult(IEnumerable<string> 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); } } } }