动态创建文本文件并在客户端下载/保存

时间:2017-05-31 20:45:28

标签: c# asp.net-core temporary-asp.net-files

在我们的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 Core 1.1中实现?试图跟随File Providers in ASP.NET Core无济于事。

1 个答案:

答案 0 :(得分: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);

因此您可以直接写入输出字符串,而无需任何额外的内存使用。但是你不应该关闭它,因为它是与浏览器的连接,可能需要进一步加入管道。