2009-05-22 6 views
5

ASP.NETアプリケーションからの* .csvのような、エクスポート/ダウンロードのためのテキストファイルを作成したいと思います。私はResponse.TransmitFileについて知っていますが、実際にサーバー上にファイルを作成して保存することなく、この作業を行いたいと思います。それは可能ですか? 誰かがそういったことをしていますか?ASP.NETでは、ブラウザに文字列コンテンツをファイルにダウンロードさせるにはどうすればよいですか? (C#)

+0

あなたはもう少し具体的になりますか?文字列を取り出してクライアント上のファイルに保存し、サーバー上にファイルを作成しないことを意味しますか? –

答えて

1

まだ保存していないファイルは、文字列変数またはMemoryStreamです。しかし、大量のデータの場合は、おそらくメモリ内にすべて保持したくないでしょう。一度それを持っていたら、この "ファイル"で何をしたいですか?

+0

私はそれをダウンロードしたいと考えています –

13

「エクスポートするファイルを作成する」と言うと、ブラウザにダウンロード可能にしたいと思っています。その場合、ここに例があります。

public void btnGo_Click (Object sender, EventArgs e) 
{ 
    Response.Clear(); 

    string fileName= String.Format("data-{0}.csv", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss")); 
    Response.ContentType = "text/csv"; 
    Response.AddHeader("content-disposition", "filename=" + fileName); 

    // write string data to Response.OutputStream here 
    Response.Write("aaa,bbb,ccc\n"); 

    Response.End(); 
} 

は引用:RFC 4180

+0

これは通常のASPXページに配置するつもりですか?それはもちろん、効果的ですが、実際には最適ではありません。開始時にASPXページを初期化/生成するためのオーバーヘッドがあります。 – Noldorin

+0

はい、これは「通常の」ASPXページになります。オーバーヘッドが何を意味しているのか、私がここに持っているものがなぜ最適でないのかは分かりません。 – Cheeso

+0

ええ、ASHXは仕事をうまくやるべきです。私は、カスタムHTTPハンドラを提案しましたが、どちらもうまくいきます。 – Noldorin

1

あなたはResponse.OutputStreamに直接使う書き込み、適切なコンテンツタイプ、およびコンテンツディスポジションヘッダーを設定することができます。

0

ああ、それは悪くないです。あなたのASPXページのPage_Loadのは、これを行うには:あなたの「ファイル」のXMLの場合

Response.ContentType = "text/xml"; 
Response.ContentEncoding = System.Text.Encoding.UTF8; 
Response.Write(/* your text goes here */); 

上記は一例ですが、それは何もすることができ、からとファイルをPDFに優れています。 GoogleまたはLive経由で検索できるContentTypeを更新するだけです。

+0

あなたはすごく素敵です... =) – JasonRShaver

0

は、このサンプルをお試しください:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Response.ContentType = "text/csv"; 
    Response.AddHeader("content-disposition", "attachment; filename=download.csv"); 
    Response.Write("your,csv,file,contents"); 
    Response.End(); 
} 
4

あなたはカスタムHTTPハンドラIHttpHandlerを実装するクラス)を記述を見て、単にweb.configファイルに登録したいと思います。設定方法の良い例は、this article on MSDNを参照してください。

ここでは、一部のCSVデータのマークアップを実装するための実装方法の基本的な例を示します。

using System.Web; 

public class MyCsvDocumentHandler : IHttpHandler 
{ 
    public static string Data 
    { 
     get; 
     set; 
    } 

    public MyCsvDocumentHandler() 
    { 
    } 

    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "text/csv"; // Set the MIME type. 
     context.Response.Write(Data); // Write the CSV data to the respone stream. 
    } 

    public bool IsReusable 
    { 
     // To enable pooling, return true here. 
     // This keeps the handler in memory. 
     get { return false; } 
    } 
} 

おそらく少し簡単です。この選択肢は、ASHX handlerページを使用することです。コードはほぼ同じです。

+0

あなたのウェブを煩わせることなくIHTTPHandlerをリンクすることも可能です(文書化されていない場合)。config - ASHXの 'page'タイプは配線を提供します。 –

+1

(これまではグラフィカルなボタンを動的に生成するためにこのテクニックを使用しましたが、これはかなり便利だと思います)。 –

+0

@鉄人:まあ、絶対に。場合によっては、HTTPハンドラ(IHttpHandler)がより望ましいのですが、これは少し柔軟性がありますが、この場合ASHXも同様です。 – Noldorin

関連する問題