2009-06-17 15 views
6

Estoy usando C# y ASP.NET 2.5.Escribir un archivo "sobre la marcha" para el cliente con C#

Quiero una manera simple de generar un "archivo" sobre la marcha (digamos un archivo csv para este ejemplo) y transmitirlo al cliente sin realmente escribirlo en el sistema de archivos del servidor.

+0

Total sidenote: ¿Estoy loco, o es la última versión de ASP.NET 2.0? .NET es de hasta 3.5 SP1, pero pensé que ASP.NET estaba en 2.0 –

Respuesta

10

Después de algunas búsquedas y prueba y error, desarrollé lo siguiente. Parece ajustarse exactamente a la factura. Debe ser muy fácilmente adaptable a PHP o cualquier otro software del lado del servidor, ya que en su mayoría consiste en modificar encabezados.

protected void streamToResponse() 
{ 
    Response.Clear(); 
    Response.AddHeader("content-disposition", "attachment; filename=testfile.csv"); 
    Response.AddHeader("content-type", "text/csv"); 

    using(StreamWriter writer = new StreamWriter(Response.OutputStream)) 
    { 
     writer.WriteLine("col1,col2,col3"); 
     writer.WriteLine("1,2,3"); 
    } 
    Response.End(); 
} 
+0

Sí, este es un buen enfoque; sin embargo, este código debe residir dentro de un archivo ashx. En Visual Studio se llama "Generic Handler", esto redujo la sobrecarga de cargar una página aspx. – Nate

+0

Nate, en el caso en que usé esto, tenía un botón "Exportar informe" que era, básicamente, la función anterior. ¿Debería el botón en su lugar haber usado de alguna manera un ashx? – Eric

2

Puedo también sugieren que si usted tiene otro tipo de datos, por ejemplo, binario, se utiliza el método Response.WriteBinary()

A menudo he creado un JPG sobre la marcha, lo escribí en un MemoryStream usando el método Bitmap.Save(), convertí el MemoryStream en una matriz de bytes [] usando .ToArray() y luego Response.WriteBinary() esa matriz .

Cuestiones relacionadas