Как получить список изображений из GridFS?

#c# #.net #asp.net-web-api #asp.net-core #asp.net-core-mvc

#c# #.net #asp.net-web-api #asp.net-core #asp.net-core-mvc

Вопрос:

Это делается для отправки представления, которое использует ajax для извлечения данных.

Я пытаюсь получить изображение из корзины MongoDB GridFS. Операция загрузки работает. Но проблема в том, что модель представления, которую я использую, имеет:

 public User User { get; set; }
public List<IFormFile> ImageUpload { get; set; }
  

Я получаю пользователя из контекста БД и использую его для идентификации изображения из корзины, и я хочу вернуть его в представление из контроллера.

Ниже приведен мой код контроллера:

 public IActionResult AddEditUser(int id = 0)
        {
            if (id == 0)
            {
                return View(new UserImgBinder());
            }
            else
            {
                var userImageId = _context.User.Where(x => x.UserId.Equals(id)).Select(y => y.AvatarImg).ToString();
                var stream = ContextNew.ImagesBucket.OpenDownloadStream(new ObjectId(userImageId.ToBson()));
                var contentType = stream.FileInfo.Metadata["ContentType"].AsString;
                //File(stream, contentType);
                IFormFile file = new  FormFile(stream, 0, stream.Length,"",""); 


                var UserImgBinder = new UserImgBinder
                {
                    User = _context.User.Where(x => x.UserId.Equals(id)).FirstOrDefault(),
                    ImageUpload = file
            };
                return View(UserImgBinder);
            }

        }
  

Поскольку ImageUpload имеет тип List, и то, что я пытаюсь передать, это не список, я получаю сообщение об ошибке.

Что я должен написать, чтобы решить эту проблему? Плох ли этот подход? Пожалуйста, помогите. Спасибо.

Комментарии:

1. У каждого пользователя есть несколько изображений? В этом случае вы можете создать новый список и добавить полученное изображение.

Ответ №1:

Попробуйте код, подобный:

 var UserImgBinder = new UserImgBinder
{
    User = _context.User.Where(x => x.UserId.Equals(id)).FirstOrDefault(),
    ImageUpload = new List<IFormFile> {
                file
            }
};
  

Комментарии:

1. спасибо, приятель. Эта проблема решена. Не возражаете, если я задам вам вопрос? Приведенный выше код, когда id = 0, покажет, что новый пользователь добавляет представление, если нет, он получит идентификатор и покажет вид редактирования. Я ожидал, что приведенный выше код волшебным образом отправит файл IFormFile обратно в представление, где я пытаюсь отредактировать пользовательские данные, и имя файла будет отображаться помимо кнопки загрузки. Не могли бы вы сообщить мне, чего мне не хватает? Tx

2. @Neo Невозможно отправить IFormfile со стороны сервера на сторону клиента.