C # Asp.net escribe el archivo al cliente

Espero que esta sea una pregunta rápida, espero. Necesito escribir algunos informes y luego pedirle al usuario que lo guarde en su máquina local. La última vez que hice esto, escribí un archivo en el servidor web y luego lo envié al cliente a través Response objeto Response .

para crear en el servidor web

  TextWriter tw = new StreamWriter(filePath); 

para enviar al cliente

  page.Response.WriteFile(path); 

La pregunta es, ¿hay alguna manera de omitir la escritura del archivo físico en el servidor web y pasar directamente de un objeto que representa el documento a la respuesta?

Podría usar Response.ContentType como este

 Response.ContentType = "text/plain"; Response.OutputStream.Write(buffer, 0, buffer.Length); Response.AddHeader("Content-Disposition", "attachment;filename=yourfile.txt"); 

Por supuesto, esto funciona si quieres escribir un archivo de texto. En caso de que desee escribir un .doc, por ejemplo, cambie ContentType a “application / msword”, etc.

Usted puede.

Prueba esto:

 Table oTable = new Table(); //Add data to table. Response.Clear(); Response.Buffer = true; Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment;filename="test.xls""); Response.Charset = ""; this.EnableViewState = false; System.IO.StringWriter oStringWriter = new System.IO.StringWriter(); System.Web.UI.Html32TextWriter oHtmlTextWriter = new System.Web.UI.Html32TextWriter(oStringWriter); 0Table.RenderControl(oHtmlTextWriter); Response.Write(oStringWriter.ToString()); Response.End(); 

Esto le indicará al usuario que abra o guarde el archivo test.xls. de forma similar, puede proporcionar otros objetos ASP.NET en lugar de Table.

Sí.

 page.Response.WriteFile(yourData, 0, yourData.Length); 

La respuesta exacta a la pregunta depende de cómo se organiza el informe (es decir, cuál es el “objeto” al que se refiere). Si tiene una sola cadena, puede usar Response.Write para simplemente escribirla. Si necesita un TextWriter, Response.Output es lo que quiere, de esa manera puede omitir escribir en el disco y luego usar WriteFile. Además, si tu contenido resulta ser binario, puedes usar Response.OutputStream para eso.

Es posible que también desee establecer Response.AddHeader (“Content-Disposition”, “attachment”), si desea que el usuario vea un cuadro de diálogo de guardar archivo. Sin embargo, Content-Disposition no necesariamente se respeta, por lo que el usuario aún puede obtener el informe abierto directamente en el navegador. ¡Recuerde establecer encabezados antes de mostrar el contenido real!

Además, dependiendo del formato del informe, es posible que desee establecer Response.ContentType en algo apropiado como text / plain, text / csv o lo que sea que tenga. Los tipos de mime correctos se enumeran en el sitio de IANA .