Создание текстового файла на лету и загрузка / сохранение на стороне клиента
В нашем приложении 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? Попытка следовать поставщикам файлов в ASP.NET Core безрезультатно.
1 ответ
Решение
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);
так что вы можете напрямую записать в выходную строку, без какого-либо дополнительного использования памяти. Но вы не должны закрывать его, так как это соединение с браузером и может понадобиться в дальнейшем.