@Vladimir301

Как получать с формы изображения через поле типа List (сейчас всегда имеет значение null)?

Пытаюсь сохранить изображение из поля в базу данных в виде 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; }
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ответы на вопрос 1
yarosroman
@yarosroman
C# the best
на самой форме прописан атрибут enctype='multipart/form-data'?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы