将字符串转换为流

时间:2013-03-20 14:34:27

标签: c# asp.net string stream

我正在尝试使用Controller.File方法将大型.csv文件作为操作结果返回,并且它要求我使用byte[]或Stream。

使用GetBytes方法时,我收到了OutOfMemoryException

有没有办法在不尝试同时将其全部放入内存的情况下执行此操作?

这是我现在正在使用的回报:

string csv = data.ToCsv();
return File(Encoding.UTF8.GetBytes(csv), "text/csv", "ClusterFMCacheExport.csv");

3 个答案:

答案 0 :(得分:1)

你试过这个吗?

using(MemoryStream stream = new MemoryStream())
using(StreamWriter writer = new StreamWriter(stream))
{
    writer.Write(s);
    writer.Flush();
    stream.Position = 0;
    return File(stream, "text/csv", "ClusterFMCacheExport.csv");
}

如果您的数据确实 大,那可能无济于事。如果您生成非常大型csv文件,建议您重新编写ToCsv()生成stream而不是string

答案 1 :(得分:0)

有一段时间没有使用ASP.NET,但不应该像这样工作(假设文件已经在磁盘上):

FileStream fs = ... // stream over your csv file, however you get it
return File(fs, "application/csv", "file.csv");

答案 2 :(得分:0)

岂不:

Response.AddHeader("content-disposition", "attachment;filename=file.csv");
return Content(csv, "application/csv");

避免转换?尽管如此,它可能只会让OOME重新出现在其他地方。