Мне нужно загрузить потенциально большие файлы на наш сайт, а затем в базу данных. Однако каждый раз, когда я создаю экземпляр байта [], который хранит данные файла, я получаю немедленное исключение System.OutOfMemoryException. Коробка имеет достаточный барабан, но IIS/.Net, похоже, имеет ограничения на память процесса.MVC5 загрузить большой файл в DB System.OutOfMemoryException
Модель:
public class CreateFileModel : IFileModel {
...
[ScaffoldColumn(false)]
public byte[] FileData { get; set; }
...
}
Сообщение Действие:
[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];
Так что я пытаюсь выяснить, куда идти отсюда. Я мог бы сохранить файл в файловой системе, используя меньший буфер, но тогда я никогда не смог бы получить его в базе данных.
Как бы вы справились с этой проблемой?
Плохая практика загрузки файлов непосредственно в базу данных. Вместо этого сохраните в папку и добавьте путь к вашей базе данных. –
Это потребует перезаписи больших блоков приложения, и на самом деле не рекомендуется поддерживать большие иерархии файлов, связанные с данными, поскольку это важная задача для поддержания целостности данных в БД и файловой системе. –