我需要上傳潛在的大文件到我們的網站,然後到數據庫中。但是,每次我實例化存儲文件數據的byte []時,都會立即得到System.OutOfMemoryException。該框具有足夠的內存,但IIS/.Net似乎對進程內存有限制。MVC5上傳大文件到DB System.OutOfMemoryException
型號:
public class CreateFileModel : IFileModel {
...
[ScaffoldColumn(false)]
public byte[] FileData { get; set; }
...
}
POST操作:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateFile(CreateFileModel model) {
try {
if (ModelState.IsValid && Request != null && Request.Files.Count > 0) {
foreach (string uploadname in Request.Files) {
HttpPostedFileBase uploadedFile = Request.Files[uploadname];
if (uploadedFile?.ContentLength > 0) {
model.FileData = new byte[uploadedFile.ContentLength]; // <-- BREAKS HERE WITH OutOfMemoryException
uploadedFile.InputStream.Read(model.FileData, 0, Convert.ToInt32(uploadedFile.ContentLength));
}
}
if (model.FileData.Length > 0) {
FileMapper mapper = new FileMapper();
mapper.Create(model);
return RedirectToAction("Index", "Index", new { pucoId = CurrentUser.PUCOID, folderId = CurrentDirectoryId });
}
}
}
catch (Exception ex) {
OnError(ex);
}
model.FileData = null;
return View(model);
}
}
錯誤實例化的模型,該模型將被用於更新數據庫接收緩衝區時,總是會發生的。
model.FileData = new byte[uploadedFile.ContentLength];
所以我想弄清楚從哪裏去。我可以使用較小的緩衝區將文件保存到文件系統,但是我實際上永遠無法將它們存入數據庫。
你會如何解決這個問題?
是不好的做法,直接上傳文件到數據庫。相反,保存到一個文件夾並將路徑添加到您的數據庫。 –
這將涉及重寫應用程序的大塊,事實上,維護與數據鏈接的大型文件層次結構是不鼓勵的,因爲維護數據庫和文件系統中數據的完整性是一項重要任務。 –