给你举个例子。我没有测试它,但它显示了你必须走的路。
首先定义一个集合:
我想这一步你已经很清楚了。
var postImagesStoreFS = new FS.Store.FileSystem("postImages", {
path: "~/workspace/uploads/"
});
添加添加了一些过滤器。以防万一你需要类似的东西。
PostImages = new FS.Collection('postImages', {
stores: [postImagesStoreFS ],
filter: {
maxSize: 3145728,
allow: {
contentTypes: ['image/*'],
extensions: ['png', 'PNG', 'jpg', 'JPG', 'jpeg', 'JPEG']
}
});
现在您可以在同一个 *.js 文件中定义允许和拒绝函数。如果删除不安全的包,所有插入/更新/删除都必须通过允许/拒绝函数。如果命令通过允许回调,则可以将其插入到您的集合中(如果没有使其无效的拒绝函数)
在这个例子中,如果有用户并且图像的元数据用户是用户本身,我只想插入图像。您必须自行设置元数据用户。对于测试,只需在每个允许函数中返回 true,如 Pent 示例所示。检查流星文档以了解有关允许/拒绝的更多信息http://docs.meteor.com/#allow
PostImages.allow({
insert: function(userId, doc) {
return (userId && doc.metadata.owner === userId);
},
update: function(userId, doc, fieldNames, modifier) {
return (userId === doc.metadata.owner);
},
remove: function(userId, doc) {
return false;
},
download: function(userId) {
return !!userId;
}
});
客户端模板应该按照您发布的方式工作。为了防止您想使用一些元数据,我添加了一个更大的示例。
Template.myForm.events({
'change .myFileInput': function(event, template) {
FS.Utility.eachFile(event, function(file) {
var fsFile = new FS.File(file);
fsFile.metadata = {owner: Meteor.userId()};
Images.insert(fsFile, function (err, fileObj) {
});
});
}
});
这应该是您需要拥有的一切。