CollectionFS
但是,如果你真的非常重视存储,并且想要存储数百万个图像,那么你将需要利用 Mongo 的 GridFS 基础架构,并创建自己的存储层。为此,你将需要优秀的 CollectionFS 子系统。
首先添加必要的包。
meteor add cfs:standard-packages
meteor add cfs:filesystem
并将文件上传元素添加到对象模型中。
<template name="yourTemplate">
<input class="your-upload-class" type="file">
</template>
然后在客户端上添加一个事件控制器。
Template.yourTemplate.events({
'change .your-upload-class': function(event, template) {
FS.Utility.eachFile(event, `function(file)` {
var yourFile = new FS.File(file);
yourFile.creatorId = Meteor.userId(); // add custom data
YourFileCollection.insert(yourFile, function (err, fileObj) {
if (!err) {
// do callback stuff
}
});
});
}
});
并在你的服务器上定义你的集合:
YourFileCollection = new FS.Collection("yourFileCollection", {
stores: [new FS.Store.FileSystem("yourFileCollection", {path: "~/meteor_uploads"})]
});
YourFileCollection.allow({
insert: function (userId, doc) {
return !!userId;
},
update: function (userId, doc) {
return doc.creatorId == userId
},
download: function (userId, doc) {
return doc.creatorId == userId
}
});
感谢 Raz 这个出色的例子。你需要查看完整的 CollectionFS 文档,以获取有关所有 CollectionFS 可以执行的操作的更多详细信息。