上传 84MB 的文件时出现此错误(请参阅下面的错误),但是当我上传 ~60MB 的文件时,它可以正常工作。这只发生在我们的 32 位 2008 虚拟机 w/4GB 内存上。在我的带有 8GB 内存的 R2 64 位 VM 上,即使是 130MB 文件也能正常工作。
System.OutOfMemoryException:引发了“System.OutOfMemoryException”类型的异常。在 System.IO.BinaryReader.ReadBytes(Int32 count) at CustWeb.Controllers.DownloadsController.Create(Download dl, HttpPostedFileBase file) in c:\...\CustWeb\Controllers\DownloadsController.cs:line 72
不过,我在任务管理器中监控了内存,在整个上传过程中它从未超过 74%。
这是 4.5 .NET 框架上的 MVC 4 应用程序。
我的 web.config 中有处理上传文件的最大设置。
<httpRuntime requestValidationMode="4.5" targetFramework="4.5" maxRequestLength="2147483647" executionTimeout="84000" />
...
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147482624" />
</requestFiltering>
</security>
更新按要求添加代码:
public ActionResult Create(Download dl, HttpPostedFileBase file)
{
try
{
using (var binaryReader = new BinaryReader(file.InputStream))
{
dl.FileBytes = binaryReader.ReadBytes(file.ContentLength);
}
dl.FileContentType = file.ContentType;
dl.FileName = file.FileName;
dl.Insert();
Success("<strong>" + dl.Label + "</strong> created and uploaded successfully.");
return RedirectToAction("Index");
}
catch (Exception ex)
{
SelectList list = new SelectList(new DownloadType().GetDownloadTypes(), "ID", "Name");
ViewBag.DownloadTypeList = list;
Error(ex.ToString());
return View(dl);
}
}