即时创建一个文本文件并将其 download/save 放在客户端
Creating a text file on the fly and have it download/save on client side
在我们的 ASP.NET Core 1.1、EF Core 1.1 应用程序中,我们用来自 SQL 服务器的一些数据填充了一个字符串,并希望动态创建一个文本文件,并且有一个来自客户端的用户 save/download。
以前我们是这样操作的:
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 无果。
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);
因此您可以直接写入输出字符串,而不使用任何额外的内存。但是您 不应该 关闭它,因为它是与浏览器的连接,并且可能需要在管道中进一步使用。
在我们的 ASP.NET Core 1.1、EF Core 1.1 应用程序中,我们用来自 SQL 服务器的一些数据填充了一个字符串,并希望动态创建一个文本文件,并且有一个来自客户端的用户 save/download。
以前我们是这样操作的:
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 无果。
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);
因此您可以直接写入输出字符串,而不使用任何额外的内存。但是您 不应该 关闭它,因为它是与浏览器的连接,并且可能需要在管道中进一步使用。