Загрузить изображение в input из бд (IFormFile) ASP NET CORE
Всем привет. Есть CRUD система со статьями, у статьи есть фото. Фото загружается в БД и в папку root проекта. При создании статьи все окей, но при обновлении фото = null. И по дефолту его нет, то есть пользователю всегда надо будет его загружать. Как сделать так, что бы взять файл из бд и поместить его в этот input? Конечно можно сделать и по другому, проверять на null и давать путь до загруженной картинки. Возможно, есть решение попроще.
Метод загрузки изображения.
string wwwRoothPath = _hostEnvironment.WebRootPath; //получаем путь до root
string filename = Path.GetFileNameWithoutExtension(model.ImageFile.FileName); //получаем название файла
string extension = Path.GetExtension(model.ImageFile.FileName); //получаем разрешение файла
model.ImageName = filename = filename + DateTime.Now.ToString("yymmssfff") + extension;
string path = Path.Combine(wwwRoothPath + "/Images/", filename);
using (var fileStream = new FileStream(path, FileMode.Create))
{
model.ImageFile.CopyTo(fileStream);
}
Код формы
<div class="form-group">
<label asp-for="ImageFile">Превью</label>
<input asp-for="ImageFile" accept="image/*" />
<span asp-validation-for="ImageFile" class="text-danger"></span>
</div>
При нажатии на кнопку "обновить" - форма будет ругаться, ибо превью обязательно. Проблема в том, что файл не выбран и я не знаю как туда его запихать, допустим из БД. Извиняюсь за "многослов".
update. Добавил код метода Update.
//Get метод
public IActionResult Update(int id)
{
var article = _context.Articles.FirstOrDefault(article => article.Id == id);
return View(article);
}
[HttpPost]
public IActionResult Update(Article model)
{
if (ModelState.IsValid)
{
var oldModel = _context.Articles.FirstOrDefault(article => article.Id == model.Id);
oldModel.Title = model.Title;
oldModel.Description = model.Description;
//Если загружаем новое превью..
string wwwRoothPath = _hostEnvironment.WebRootPath;
string filename = Path.GetFileNameWithoutExtension(model.ImageFile.FileName);
string extension = Path.GetExtension(model.ImageFile.FileName);
oldModel.ImageName = filename = filename + DateTime.Now.ToString("yymmssfff") + extension;
string path = Path.Combine(wwwRoothPath + "/Images/", filename);
using (var fileStream = new FileStream(path, FileMode.Create))
{
model.ImageFile.CopyTo(fileStream);
}
_context.Articles.Update(oldModel);
_context.SaveChanges();
return RedirectToAction(nameof(Articles));
}
return View(model);
}
