2017-05-31 16 views
0

ASP.NET Core 1.1のEF Core 1.1アプリでは、SQL Serverからのデータを文字列に取り込み、テキストファイルその場で作成され、ユーザーがクライアント側からセーブ/ダウンロードすることができます。オンザフライでテキストファイルを作成してクライアント側でダウンロード/保存する

List<string> stringList = GetListOfStrings(); 

MemoryStream ms = new MemoryStream(); 
TextWriter tw = new StreamWriter(ms); 

foreach (string s in stringList) { 
    tw.WriteLine(s); 
} 
tw.Flush(); 
byte[] bytes = ms.ToArray(); 
ms.Close(); 

Response.Clear(); 
Response.ContentType = "application/force-download"; 
Response.AddHeader("content-disposition", "attachment; filename=myFile.txt"); 
Response.BinaryWrite(bytes); 
Response.End(); 

をASP.NETコア1.1でそれを達成することができますどのように次のように我々はそれを行うために使用される昔

File Providers in ASP.NET Coreに従うことを試みました。

+0

'Response.ContentType'を' Response.ContentType = "application/download"にしてはいけません。 'Response.ContentType =" text ";' – MethodMan

+0

Web APIを使っていますか? – Amy

+0

@MethodMan 'application/download'でもOKです。 – nam

答えて

0
MemoryReader mr = new MemoryStream(); 
TextWriter tw = new StreamWriter(mr); 

foreach (string s in stringList) { 
    tw.WriteLine(s); 
} 
tw.Flush(); 

return File(mr, "application/force-download", "myFile.txt") 

直接応答に書き込む:

HttpContext.Response.Body.WriteAsync(...); 

また、実行可能な代替

TextWriter tw = new StreamWriter(HttpContext.Response.Body); 

ので、あなたが直接、任意の追加のメモリ使用量なしで、出力文字列に書き込むことができます。しかし、を閉じるべきではありません。これはブラウザへの接続であり、パイプラインでさらに必要となる可能性があるためです。

+0

というエラーがあります。 'TextWriterからbyte []に​​変換できません。 – nam

+0

その後、メモリストリームを渡してください。ファイルには 'Stream'を受け入れるオーバーロードがあります – Tseng

+0

もちろん、バイトを受け入れる' WriteAsync'を使う代わりに 'new StreamWriter(HttpContext.Response.Body)'を使ってストリームに書き込むこともできます。 – Tseng

関連する問題