Пытаюсь сохранить изображение из поля в базу данных в виде Base64String (знаю, что так лучше не делать, но всё же задача такая), но при отправке формы IFormFile всегда null. В базе есть таблицы Image и FeedBack. Нужно прикреплять к отзывам изображения. Ещё есть модель в самом приложении.
Метод в контроллере:
/// <summary>
/// Редактирование отзыва
/// </summary>
/// <returns></returns>
[HttpPut("feedback")]
public async Task<Result<int>> EditFeedBackAsync([FromBody] Models.FeedBack.FeedBack feedBack)
{
return await _feedBackProvider.EditFeedBackAsync(feedBack);
}
Метод в провайдере:
public async Task<Result<int>> EditFeedBackAsync(Models.FeedBack.FeedBack feedBack)
{
if (feedBack.SelectedTypeList != null)
{
feedBack.TypeFlags = (TypeFlags)feedBack.SelectedTypeList?.Sum();
}
if (feedBack.BrandsSelected != null)
{
feedBack.Brand = (Brand)feedBack.BrandsSelected?.Sum();
}
var mapResult = _mapperProvider.CreateMap<Models.FeedBack.FeedBack, FusionDatabase.Models.FeedBack>(feedBack);
if (mapResult.HasError)
{
return new ErrorResult<int>(mapResult);
}
var mappedFeedBack = mapResult.ResponseObject;
if (feedBack.Images != null)
{
foreach (var image in feedBack.Images)
{
//Stream stream = image.OpenReadStream();
//using (var memoryStream = new MemoryStream())
//{
// stream.CopyTo(memoryStream);
// byte[] content = memoryStream.ToArray();
//}
string base64Content = Convert.ToBase64String(File.ReadAllBytes(image.Name));
Image imageTmp = new Image(feedBack.Id.ToString(), base64Content);
mappedFeedBack.Images.Add(imageTmp);
}
}
return await _feedBackRepository.SaveItemAsync(mappedFeedBack);
}
Поле в которое должны (по идее) передавться изображения с формы в классе FeedBack, который передаётся в метод:
/// <summary>
/// Фото
/// </summary>
[Display(Name = "Фото")]
public List<IFormFile>? Images { get; set; }
Поле для загрузки на View:
<div class="mb-3">
<label class="form-label">Фото</label>
<input class="form-control" type="file" multiple id="images" name="images" />
</div>
Класс Image в БД:
public class Image
{
public Image(string name, string content)
{
Name = name;
Content = content;
}
/// <summary>
/// ID
/// </summary>
public int ImageId { get; set; }
/// <summary>
/// Название
/// </summary>
public string? Name { get; set; }
/// <summary>
/// Файл
/// </summary>
public string Content { get; set; }
}
Поле класса FeedBack из БД для связи с Image:
/// <summary>
/// Фото
/// </summary>
public List<Image>? Images { get; set; }