从标题中可以看出,删除不安全的软件包后,我的Collection FS出现了问题。
我正在使用cfs:gridfs。
删除包:INSECURE,AUTOPUBLISH
我的HTML
<template name="image_upload">
<input class="fileinput btn" type="file" name="file" accept="image/*" {{disableButton}}>
</template>
在我的服务器publications.js
中Meteor.publish("image_upload", function () {
return Images.find();
});
我的lib / collections.js
Images = new FS.Collection("images", {
stores: [
new FS.Store.GridFS("images"),
],
filter: {
allow: {
contentTypes: ['image/*']
}
}
});
Images.deny({
insert : function() {return false},
update : function() {return false},
remove : function() {return false},
// insert : function() {return false},
});
Images.allow({
insert: function() { return true },
update: function() { return true },
remove: function() { return true }
});
我的图片上传活动
Template.image_upload.events({
'change .fileinput': function(event, template){
// console.log('abs');
var username = Meteor.user().username;
FS.Utility.eachFile(event, function(file){
var fsFile = new FS.File(file);
fsFile.username = username;
fsFile.tweetkey = Session.get('tweetkey');
Images.insert(fsFile, function(err) {});
});
}
});
我的套餐
# Meteor packages used by this project, one per line.
# Check this file (and the other files in this directory) into your repository.
#
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.
meteor-platform
accounts-ui
accounts-password
msavin:mongol
cfs:standard-packages
cfs:gridfs
iron:router
mizzao:jquery-ui
mizzao:bootstrap-3
fortawesome:fontawesome
reywood:publish-composite
momentjs:moment
如果有人能帮助我,那会很好!
答案 0 :(得分:0)
尝试设置Images.deny({})
的规则。它们会覆盖您的allow
个,但据我所知,deny
规则应首先添加。在他们提到的文件上:
仅当没有拒绝规则返回true且至少有一个允许规则返回true时,Meteor才允许写入。
编辑:看到您在控制台中没有任何错误后,我认为这只是订阅问题(删除autopublish
将迫使您订阅每条路线)。尝试更改模板和路由器,如:
客户端\ image_upload.html
<template name="image_upload">
<input class="fileinput btn" type="file" name="file" accept="image/*" {{disableButton}}>
{{#each images}}
<div class="img">
{{this.original.name}}
</div>
{{/each}}
</template>
的lib \ router.js
Router.route('/', {
name: 'image_upload',
action: function () {
this.render('image_upload');
},
data: function () {
return {
images: Images.find({})
};
},
waitOn: function () {
return [
Meteor.subscribe('image_upload')
];
}
});
将来,请尝试查看https://github.com/meteorhacks/subs-manager以获得更好的订阅管理器,缓存等。
答案 1 :(得分:0)
你有这个:
Meteor.publish("image_upload", function () {
return Images.find();
});
但“image_upload”是您的模板名称,而不是您的收藏名称。您的收藏称为“图片”。
在服务器上,您可以定义发布到客户端的数据(集合)。试试这个:
Meteor.publish("images", function () {
return Images.find();
});