Создать текстовый файл и скачать без сохранения на сервере в ASP.net Core MVC 2.1 - PullRequest
0 голосов
/ 27 ноября 2018

Я нашел способ создать текстовый файл, а затем мгновенно загрузить его в браузере, не записывая его на сервер в обычном ASP.net:

Создать текстовый файл и загрузить

Принятый ответ использует:

using (StreamWriter writer = new StreamWriter(Response.OutputStream, Encoding.UTF8)) {
  writer.Write("This is the content");
}

Мне нужно сделать это в ASP.net Core 2.1 MVC - хотя и не знаю, что такое Response.OutputStream - и я могуt найти что-нибудь в Google, чтобы помочь с этим, или другие способы сделать это.

Как я могу это сделать?Спасибо.

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Если вы имеете дело только с текстом, вам не нужно делать ничего особенного.Просто верните ContentResult:

return Content("This is some text.", "text/plain");

Это работает так же и для других «текстовых» типов контента, таких как CSV:

return Content("foo,bar,baz", "text/csv");

Если вы пытаетесь форсировать загрузку,Вы можете использовать FileResult и просто передать byte[]:

return File(Encoding.UTF8.GetBytes(text), "text/plain", "foo.txt");

Параметр filename запрашивает заголовок Content-Disposition: attachment; filename="foo.txt".В качестве альтернативы вы можете вернуть Content и просто установить этот заголовок вручную:

Response.Headers.Add("Content-Disposition", "attachment; filename=\"foo.txt\"");
return Content(text, "text/plain");

Наконец, если вы строите текст в потоке, то просто верните FileStreamResult:

return File(stream, "text/plain", "foo.txt");
0 голосов
/ 29 ноября 2018

В приведенном ниже коде вы используете Response.OutputStream.но это не работает в asp.net, а Response.OutputStream выдает ошибку в ядре asp.net.

using (StreamWriter writer = new StreamWriter(Response.OutputStream, Encoding.UTF8)) {writer.Write("This is the content");}

Итак, используйте следующий код для загрузки файла в ядро ​​asp.net.

using (MemoryStream stream = new MemoryStream())
{
StreamWriter objstreamwriter = new StreamWriter(stream);
objstreamwriter.Write("This is the content");
objstreamwriter.Flush();
objstreamwriter.Close(); 
return File(stream.ToArray(), "text/plain", "file.txt");
}
0 голосов
/ 27 ноября 2018

Немного по-другому , но, похоже, это то, что вы ищете

Редактировать: исправлены завершающие нули в конце файла

[HttpGet]
[Route("testfile")]
public ActionResult TestFile()
{
    MemoryStream memoryStream = new MemoryStream();
    TextWriter tw = new StreamWriter(memoryStream);

    tw.WriteLine("Hello World");
    tw.Flush();

    var length = memoryStream.Length;
    tw.Close();
    var toWrite = new byte[length];
    Array.Copy(memoryStream.GetBuffer(), 0, toWrite, 0, length);

    return File(toWrite, "text/plain", "file.txt");
}

oldответ (проблема конечных нулей)

[HttpGet]
[Route("testfile")]
public ActionResult GetTestFile() {
    MemoryStream memoryStream = new MemoryStream();
    TextWriter tw = new StreamWriter(memoryStream);

    tw.WriteLine("Hello World");
    tw.Flush();
    tw.Close();

    return File(memoryStream.GetBuffer(), "text/plain", "file.txt");
}
...