0

Controller.File メソッドを使用してアクションの結果として大きな .csv ファイルを返そうとしていますが、それには abyte[]または Stream を使用する必要があります。

GetBytesメソッドを使用すると、 OutOfMemoryException.

すべてを同時にメモリに入れようとせずにこれを行う方法はありますか?

現時点で使用しているリターンは次のとおりです。

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

3 に答える 3

2

これを試しましたか?

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()生成を書き直すことをお勧めします。streamstring

于 2013-03-20T14:48:20.633 に答える
0

しません:

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

変換を避けますか?しかし、OOMEが他の場所に再出現するためだけに、それは道を踏み外すかもしれません。

于 2013-03-20T14:49:28.133 に答える
0

しばらくの間 ASP.NET を使用していませんが、このような作業はすべきではありません (ファイルが既にディスク上にあると仮定します)。

FileStream fs = ... // stream over your csv file, however you get it
return File(fs, "application/csv", "file.csv");
于 2013-03-20T14:44:01.107 に答える