Meteor Collection 删除不安全的包后 FS 插入不工作
Meteor Collection FS insert not working after removing insecure packages
正如您从标题中看到的那样,我的 Collection 文件系统在删除不安全的软件包后出现问题。
我正在使用 cfs:gridfs。
正在删除软件包:不安全、自动发布
我的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
如果有人能帮助我,那就太好了!
也尝试为 Images.deny({})
设置规则。它们将覆盖您的 allow
规则,但据我所知,应首先添加 deny
规则。在他们提到的文档中:
Meteor allows the write only if no deny rules return true and at least one allow rule returns true.
编辑:看到你的控制台没有任何错误后,我认为这只是订阅的问题(删除 autopublish
将强制你订阅对于每条路线)。尝试像这样更改模板和路由器:
client\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 以获得更好的订阅管理器、缓存等。
你有这个:
Meteor.publish("image_upload", function () {
return Images.find();
});
但 "image_upload" 是您的模板名称,而不是您的 collection 名称。你的 collection 叫做 "images".
在服务器上,您可以定义将哪些数据(collections)发布到客户端。试试这个:
Meteor.publish("images", function () {
return Images.find();
});
正如您从标题中看到的那样,我的 Collection 文件系统在删除不安全的软件包后出现问题。
我正在使用 cfs:gridfs。
正在删除软件包:不安全、自动发布
我的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
如果有人能帮助我,那就太好了!
也尝试为 Images.deny({})
设置规则。它们将覆盖您的 allow
规则,但据我所知,应首先添加 deny
规则。在他们提到的文档中:
Meteor allows the write only if no deny rules return true and at least one allow rule returns true.
编辑:看到你的控制台没有任何错误后,我认为这只是订阅的问题(删除 autopublish
将强制你订阅对于每条路线)。尝试像这样更改模板和路由器:
client\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 以获得更好的订阅管理器、缓存等。
你有这个:
Meteor.publish("image_upload", function () {
return Images.find();
});
但 "image_upload" 是您的模板名称,而不是您的 collection 名称。你的 collection 叫做 "images".
在服务器上,您可以定义将哪些数据(collections)发布到客户端。试试这个:
Meteor.publish("images", function () {
return Images.find();
});