mongodb - 使用 GridFS 和 Meteor 在 Mongodb 中存储图像

标签 mongodb meteor

我是 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比如 thisthis )。

虽然难以学习和设置,但 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/

相关文章:

javascript - Meteor 中的附加订阅

angularjs - Meteor+AngularJs 示例

sql查询mongodb?

javascript - 使用嵌入文档列表和使用 ObjectId 列表之间有区别吗?

MongoDB Feed 设计和查询

javascript - 在 Meteor 中创建传统 Web 应用程序有哪些缺点?

mongodb - Meteor - 将所有用户发布到客户端,仅供管理员使用

javascript - 如何从另一个集合中只检索几个字段

javascript - MongoDB按日期查询组集合上周/上个月/所有NodeJS

javascript - 如何让我的模式从左侧水平滑入?