创建文本文件并下载而不保存在ASP.net Core MVC 2.1中的服务器上

时间:2018-11-27 00:26:16

标签: c# asp.net-core-mvc asp.net-core-2.0 asp.net-core-2.1

我找到了一种创建文本文件然后立即在浏览器中下载而不将其写入常规ASP.net中的服务器的方法:

Create text file and download

可接受的答案使用:

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

我需要在ASP.net Core 2.1 MVC中执行此操作-尽管其中不知道什么是Response.OutputStream-并且我在Google上找不到任何可用于此目的的方法或其他方法。

我该怎么做?谢谢。

4 个答案:

答案 0 :(得分:2)

如果您只处理文本,则根本不需要做任何特殊的事情。只需返回一个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");

答案 1 :(得分:1)

A little different way,但这似乎正是您要寻找的

编辑:在文件末尾修正尾随零

[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");
}

旧答案(零尾问题)

[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");
}

答案 2 :(得分:1)

在下面的代码中,您使用Response.OutputStream。但这确实在asp.net中有效,但是Response.OutputStream在asp.net核心中引发错误。

d.Log.Term(d.Log.Term() + 1)
d.Log.State(BeCandidate)

因此,请使用以下代码在asp.net核心中下载文件。

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

答案 3 :(得分:0)

public ActionResult Create(Information information)
{
   var byteArray = Encoding.ASCII.GetBytes(information.FirstName + "" + information.Surname + "" + information.DOB + "" + information.Email + " " + information.Tel);
   var stream = new MemoryStream(byteArray);

   return File(stream, "text/plain", "your_file_name.txt");
}