2009-06-17 17 views
6

ile istemciye "anında" bir dosya yazma C# ve ASP.NET 2.5 kullanıyorum.C# ve #

Yolda bir "dosya" oluşturmanın basit bir yolunu (bu örnek için bir csv dosyası diyelim) ve sunucu dosya sistemine yazmadan istemciye iletmek istiyorum.

+0

Total sidenote: Kuruyemiş miyim, yoksa ASP.NET 2.0'ın en son sürümü mü? .NET 3.5 SP1'e kadar, ama ASP.NET'in 2.0 –

cevap

10

Bazı arama ve deneme yanılmalarından sonra, aşağıdakileri geliştirdim. Tasarıya tam olarak uyuyor gibi görünüyor. Çoğu zaman üstbilgileri değiştirmeyi içerdiği için PHP'ye veya diğer sunucu tarafındaki yazılımlara kolayca uyarlanabilir olmalıdır.

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

olduğunu düşündüm Evet, bu iyi bir yaklaşım; Ancak, bu kod bir ashx dosyasının içinde yer almalıdır. Görsel stüdyosunda "Genel İşleyici" olarak adlandırılan bu, bir aspx sayfası yükleme yükünü azaltmıştır. – Nate

+0

Nate, bunu kullandığım durumda, temelde yukarıdaki işlev olan bir "Dışa Aktarma Raporu" düğmesi vardı. Bunun yerine düğme bir şekilde bir ashx kullandı mı? – Eric

2

Ben de metin dışında bir şey varsa, diyelim ki, ikili, sen Response.WriteBinary() yöntemini kullanmak olduğunu, önerebilir

Sıklıkla bir JPG oluşturdum, Bitmap.Save() yöntemini kullanarak MemoryStream'e yazdım, MemoryStream öğesini .ToArray() ve ardından Response.WriteBinary() dizisini kullanarak bir byte [] dizisine dönüştürdüm. .