Создание текстового файла на лету и загрузка / сохранение на стороне клиента

В нашем приложении 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);

так что вы можете напрямую записать в выходную строку, без какого-либо дополнительного использования памяти. Но вы не должны закрывать его, так как это соединение с браузером и может понадобиться в дальнейшем.

Другие вопросы по тегам