如何将上传的图像保存到 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.aspxGridFS
不仅用于存储大文件。如果您将文件直接存储在用户文档中,要记住的一件事是,您必须在每次查询用户时加载和传输该数据,而不是仅在需要时加载和传输该数据。相反,当您只需要文件时,您必须加载用户文档的其余部分。
是的,我认为你是对的。我认为是一次性检索整个用户数据,包括 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 集合并检索它的主要内容,如果未能解决你的问题,请参考以下文章
如何在nodejs中使用sharp调整图像大小然后使用multer上传
如何在nodejs中使用sharp调整图像大小然后使用multer上传
Rails API 回形针。上传图像将其转换为 base 64 并保存并检索它