如何将上传的图像保存到 MongoDB 集合并检索它

Posted

技术标签:

【中文标题】如何将上传的图像保存到 MongoDB 集合并检索它【英文标题】:How to save uploaded images to a MongoDB collection, and retrieve it 【发布时间】:2011-11-24 05:11:12 【问题描述】:

我想将上传的用户头像等文件保存到MongoDB中的用户集合中,我猜步骤是:

    用户上传图片; 使用 FileHandler (IHttpHandler, Asp.net) 接受 Web 服务器中的文件流; 然后我获取该文件二进制文件并将其设置为用户类对象 最后保存对象,这样用户集合就会得到文件二进制数据。

我说得对吗?你能给我一点线索吗?

【问题讨论】:

您使用的是什么客户端语言(我猜是 C# 之类的,但我不确定)? 是的,我用过 C#,我知道 GridFs 可能是一种解决方案,但它只是用于大文件存储和方便使用分片或副本的东西,我搜索谷歌并找不到我面临的类似情况。 我在浏览器中将二进制数据转换为 img 得到了很好的参考:forums.asp.net/p/1505985/3574567.aspx GridFS 不仅用于存储大文件。如果您将文件直接存储在用户文档中,要记住的一件事是,您必须在每次查询用户时加载和传输该数据,而不是仅在需要时加载和传输该数据。相反,当您只需要文件时,您必须加载用户文档的其余部分。 是的,我认为你是对的。我认为是一次性检索整个用户数据,包括 avator 二进制文件,然后查看页面获取模型并组合 img 标签的数据---我认为现在是错误的,你不能通过 html 协议传输二进制数据, handler 这个额外的工作应该做,将二进制转换为可以存储在隐藏输入中的文本,下一步也是一个艰难的步骤,将文本转换为 img 对象,这个可行性提醒模糊。我认为另一种方法是使用额外的集合来存储图像,因为@dcrosta 说,顺便说一句。谢谢 【参考方案1】:

您应该只使用 GridFS 来执行此操作 - 没有理由担心文件太大或太小而无法理解。 GridFS 旨在存储文件,因此您应该使用它。

如果需要,您始终可以在普通 MongoDB 文档中存储对 GridFS 文件的引用,然后在需要使用时将其从 GridFS 中加载出来。

看到这个帖子:MongoDB GridFs with C#, how to store files such as images?

【讨论】:

【参考方案2】:

根据 Mongo grid fs 文档。如果您的文件都小于 16 MB BSON 文档大小限制,请考虑将每个文件存储在单个文档中,而不是使用 GridFS。您可以使用 BinData 数据类型来存储二进制数据。有关使用 BinData 的详细信息,请参阅您的驱动程序文档。

【讨论】:

以上是关于如何将上传的图像保存到 MongoDB 集合并检索它的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像上传到 Cloudinary - MERN 堆栈

如何在nodejs中使用sharp调整图像大小然后使用multer上传

如何在nodejs中使用sharp调整图像大小然后使用multer上传

Rails API 回形针。上传图像将其转换为 base 64 并保存并检索它

使用 Multer 将图像上传到 mongoDB 时 Heroku 出错

如何使用GridFS上传文件并将其直接保存到MongoDB中