Mongodb 如何使用Meteor存储大型文件?

Mongodb 如何使用Meteor存储大型文件?,mongodb,meteor,gridfs,Mongodb,Meteor,Gridfs,我正在构建一个Meteor(meteorjs)应用程序,该应用程序需要存储和显示PDF文件,有时大小可达500Mb。GridFS似乎还没有集成,所以我想知道在这种情况下是否值得使用Meteor,还是坚持使用Rails 理想情况下,我不会使用S3——我希望将文件保存在我的服务器上 更新:似乎可以直接连接到Meteor的外部,我不需要自动移动PDF,这可能没有意义 更具体地说,我现在关注的是: MongoDB->ElasticSearch使用 使用meteor中的说明,您可以在meteor中使用Gr

我正在构建一个Meteor(meteorjs)应用程序,该应用程序需要存储和显示PDF文件,有时大小可达500Mb。GridFS似乎还没有集成,所以我想知道在这种情况下是否值得使用Meteor,还是坚持使用Rails

理想情况下,我不会使用S3——我希望将文件保存在我的服务器上

更新:似乎可以直接连接到Meteor的外部,我不需要自动移动PDF,这可能没有意义

更具体地说,我现在关注的是: MongoDB->ElasticSearch使用


使用meteor中的说明,您可以在meteor中使用GridFS,而无需触摸任何额外的软件包

var db=MongoInternals.defaultRemoteCollectionDriver().mongo.db//抓取数据库对象
var GridStore=mongonternals.NpmModule.GridStore;
WebApp.connectHandlers.use('/someurl',函数(req,res){
var bigFile=new GridStore(db,'bigFile.iso','r')//读取
打开(函数(错误,结果){
如果(错误)返回
bigFile.stream();//对文件进行流式处理
on('error',函数(e){…})//处理错误等
bigFile.on('end',function(){bigFile.close();});//完成后关闭文件
bigFile.pipe(res);//将文件管道化到res
});
});
然而,Meteor目前使用的GridStore/mongo(v1.3.x)有点过时,最新的verion是2.x版本 v1.x似乎不适合使用,因此您可能需要使用较新的版本

第二个选项

var db=MongoInternals.defaultRemoteCollectionDriver().mongo.db//抓取数据库对象
var GridStore=Npm.require('mongodb').GridStore//在package.js中添加Npm.dependens({mongodb:'2.0.13'})
WebApp.connectHandlers.use('/someurl',函数(req,res){
var bigFile=new GridStore(db,'bigFile.iso','r').stream(true);//新API不需要bigFile.open(),并将在结束时自动关闭
on('error',函数(e){…});//处理错误等
on('end',function(){…});
bigFile.pipe(res);//将文件管道化到res
});

在本例中,我使用WebApp.connectHandlers,但当然可以使用iron:router或其他工具。我尝试了一个500MB的文件,它的管道都很好。您还需要设置res.writeHead(200)和其他内容,如内容类型等,您需要像在普通节点中一样实现文件存储,在
WebApp中引入一个connect处理程序。connectHandlers
您尝试过使用cfs文件系统的collectionFS吗?@theo3335796谢谢-我尝试过,但我不喜欢使用顶部有这么大警告的东西。我知道流星也是实验性的,但看起来更稳定。注:该软件包目前正在积极开发中(2014-3-31)。它有bug,API可能会继续更改。请帮助测试并修复错误,但不要在生产中使用。imslavko-你可能是对的,现在开始研究它。@user1431782实际上我在两个应用程序上使用GridFs,它运行得很好