2009-07-02 18 views
25

レポートを書き、ユーザーにローカルマシンに保存するように要求する必要があります。私が最後にこのファイルをWebサーバーに書き込んだ後、Responseオブジェクト経由でクライアントに送信しました。 C#Asp.netがクライアントにファイルを書き込む

は、クライアントの質問がある

page.Response.WriteFile(path); 

に送信する

TextWriter tw = new StreamWriter(filePath); 

Webサーバ上で作成するには、Webサーバへの物理的なファイルの書き込みをスキップして、右から行く方法はあります応答にドキュメントを表すオブジェクト?

答えて

25

テキストファイルを書き込みたい場合はもちろん、これは動作します。たとえば、.docを書きたい場合は、ContentTypeを "application/msword"などに変更します。

+0

このコードは、ブラウザに書き込みを書き込みます。私はプロンプトを得ません。 IReport rpt =新しいContxReport(); 文字列レポート= rpt.makeReport();ASCIIEncoding encoding =新しいASCIIEncoding(); byte [] encodedReport = encoding.GetBytes(report); レスポンス。ContentType = "text/plain"; Response.OutputStream.Write(encodedReport、0、encodedReport.Length); Response.AddHeader( "Content-Disposition"、 "inline; filename = shit.csv"); Response.End(); – jim

+1

また、書き込む前にすべてのヘッダーを設定する必要があります。 – Talljoe

+1

***バッファ***とは何ですか? – Kiquenet

16

できます。これは、Test.xlsをファイルを開いたり、保存を促す与える

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(); 

はこれを試してみてください。 同様に、テーブルの代わりに他のASP.NETオブジェクトを提供することができます。

+0

StringWriterを作成する代わりにResponse.Outputを使用できるはずです。 – Talljoe

+0

私には2つの質問があります。 1)そのファイルは再開可能か? 2)IDMなどのダウンロードマネージャを使用する場合、複数の接続が可能ですか? – shashwat

+2

@ShashwatTripathiわからない。これは私が長年使っていたコードです。 IMHO、それは履歴書や複数のダウンロード接続をサポートしません。 –

5

はい。

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

私には2つの質問があります。 1)そのファイルは再開可能か? 2)IDMなどのダウンロードマネージャを使用する場合、複数の接続が可能ですか? – shashwat

5

質問に対する正確な答えは、あなたのレポートを組織していないかに依存します(つまり、あなたがに「オブジェクト」を参照しているされているもの)。文字列が1つの場合は、Response.Writeを使用してそれを書き込むことができます。 TextWriterが必要な場合は、Response.Outputが必要です。ディスクへの書き込みをスキップしてからWriteFileを使用することができます。また、コンテンツがバイナリである場合は、そのためにResponse.OutputStreamを使用できます。

ユーザーにファイルの保存ダイアログが表示されるようにする場合は、Response.AddHeader( "Content-Disposition"、 "attachment")を設定することもできます。しかし、Content-Dispositionは必ずしも受け入れられるわけではないので、ユーザーはブラウザで直接開いたレポートを取得することができます。実際のコンテンツを出力する前にヘッダーを設定することを忘れないでください!

また、レポートの形式によっては、Response.ContentTypeをtext/plain、text/csvなどの適切な値に設定することができます。正しいMIMEタイプはthe IANA siteにリストされています。あなたはこの

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

ようResponse.ContentTypeのを使用することができ

関連する問題