如何从GridFS中检索图像列表?

How to retrieve list of images from GridFS?

提问人:Neo 提问时间:4/22/2019 更新时间:4/23/2019 访问量:283

问:

这是为了提交一个使用 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,而我试图输入的不是列表,因此我收到错误。

我应该写什么来解决这个问题?这种方法不好吗? 请帮忙。 谢谢。

c# asp.net-core-mvc

评论

0赞 Metheny 4/22/2019
每个用户都有多个图像?在这种情况下,您可以创建一个新列表并添加检索到的图像。

答:

0赞 Edward 4/23/2019 #1

尝试如下代码:

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

评论

0赞 Neo 4/24/2019
谢谢伙计。该问题已解决。介意我问你一个问题吗?上面的代码,当 id=0 时,将显示新用户添加视图,否则它将拾取 id 并显示编辑视图。我所期望的是上面的代码神奇地将 IFormfile 发布回我尝试编辑用户数据的视图,并且文件名将显示在上传按钮旁边。你能告诉我我错过了什么吗?发射
0赞 Edward 4/25/2019
@Neo 无法从服务器端发送到客户端。IFormfile