【发布时间】:2013-11-29 09:43:31
【问题描述】:
我的控制器中有这个动作,它向用户返回一个文件。
public virtual ActionResult ReturnFile(string fileName, string filePath, string contentType)
{
var cd = new System.Net.Mime.ContentDisposition
{
FileName = fileName,
// always prompt the user for downloading, set to true if you want
// the browser to try to show the file inline
Inline = false,
};
// set token for close the modal-window
CookiesHelper.SetValueDownloadTokenInCookie();
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(filePath, contentType);
}
它工作正常,但问题是当文件很大(略大于 220 Mb)时,它会抛出一个OutOfMemoryException。
这是堆栈跟踪
[OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.]
System.IO.MemoryStream.set_Capacity(Int32 value) +93
System.IO.MemoryStream.EnsureCapacity(Int32 value) +64
System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count) +330
Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.ArteryFilter.Write(Byte[] buffer, Int32 offset, Int32 count) +106
System.Web.HttpWriter.FilterIntegrated(Boolean finalFiltering, IIS7WorkerRequest wr) +9509748
System.Web.HttpResponse.FilterOutput() +104
System.Web.CallFilterExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +49
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
有什么想法吗?
【问题讨论】:
-
这很奇怪,因为
FilePathResult正在使用HttpResponse.TransmitFile,它不会缓冲文件。你确定这是异常来自的动作吗?附言你不需要设置Content-Disposition,结果会为你做。
标签: c# asp.net-mvc