我是 meteor 和 mongodb 的初学者,我正在寻找一种在 mongodb 集合中一次存储许多图像的方法。如果有演示或可以帮助我的东西,请给我。谢谢!
最佳答案
管理文件上传既复杂又困难,这取决于您要处理的文件类型和文件数量
少量文件
如果图像或文件的数量和大小不是很大,可以尝试 mongoDB GridFS,有两个支持 GridFS 的著名包:
- CollectionFS :
meteor add cfs:standard-packages cfs:gridfs
CollectionFS 还支持服务器文件系统(永远不要将其用于用户上传文件)AWS-S3,甚至是 Dropbox。 CFS 真的很强大并且有很多有用的特性。但是,我在使用的过程中遇到了一些问题,并且可以弄清楚如何解决,所以我离开了......(huge number of open bug tickets听起来并不积极) - file-collection :
meteor add vsivsi:file-collection
与 CFS 相比轻量级,仅支持 GridFS。离开 CFS 后我切换到文件收集一段时间,它更容易启动和运行,而且 IMO 更可预测。
但是! GridFS 的问题在于 MongoDB 的维护成本很高,请参阅 mongolab 和 compose.io(以前的 mongohq)定价。这很昂贵,因为维护 mongo 很困难,甚至调试也很困难,而且如果您的数据库崩溃,您的应用程序将无法运行!因此,让文件上传远离 mongoDB 可能是一个更好的主意...
那么我应该在哪里存储用户上传的文件?
简短的回答是:S3(或谷歌云/Azure 等价物),您可以看到定价 here。 S3 稳定、安全、便宜且可完美扩展(Dropbox 仍使用 S3)。
但问题是……S3 更难学。我目前使用 slingshot
来管理客户端文件上传(所以大文件上传不会减慢我的 Web 服务器的速度),并且到目前为止工作正常(如果这个包不适合你,你可以随时切换回官方的 AWS SDK比如 this 或 this )。
虽然难以学习和设置,但 S3 非常灵活且功能强大,因此如果您允许用户将文件上传到您的应用、存储大量文件、想要拥有不同的用户角色/权限,或者只是想要准备扩展,我认为 S3 是选择。
但我想快速启动并运行
有些服务可以提供简单的设置文件上传和托管,但你只需要付费,哈哈。
我个人最喜欢的是 Filepicker(重命名为 filestack ),你可以试试他们的免费计划,也有一个 meteor package to use。几个月前我使用了它,当时它被称为 filepicker.io,并且运行良好(不过现在我切换到了我自己的 S3)。
结论
我从不建议在 mongoDB 中存储任何静态文件,即使是很小的图像。对于长期和可扩展性,S3 + cloudfront(用于提供静态文件的 CDN)是解决方案。但是,如果您刚刚开始构建您的应用程序,那么您不应该将时间浪费在设置所有这些 AWS 配置/策略上。我建议从 filepicker 开始,只需放入代码片段即可,然后您就可以专注于构建真正的核心功能。
关于mongodb - 使用 GridFS 和 Meteor 在 Mongodb 中存储图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34616596/