我想从订阅我的图片fs.collection过滤我的结果。
集合声明如下:
Images = new FS.Collection('images', {
stores: [ImagesStore],
filter: {
//maxSize: 1048576 * 1, //in bytes //1MB
maxSize: 512 * 1024, //in bytes
allow: {
contentTypes: ['image/*'],
extensions: ['png', 'PNG', 'jpg', 'JPG', 'jpeg', 'JPEG', 'gif', 'GIF' ]
},
onInvalid: function (message) {
if (Meteor.isClient) {
alert("Your file must be a ['png', 'PNG', 'jpg', 'JPG', 'jpeg', 'JPEG', 'gif', 'GIF' ], and must not exceed 512KBytes");
sAlert.error(message, {effect: 'stackslide', position: 'left-top', timeout: '3000'});
} else {
console.log(message);
}
}
}
});
FS.HTTP.setBaseUrl('/usrImg');
Images.deny({
insert: function(userId, fileObj) {
return false;
},
update: function(userId, fileObj) {
return false;
},
remove: function(userId, fileObj) {
return false;
},
download: function(userId, fileObj /*, shareId*/) {
return false;
},
fetch: []
});
Images.allow({
insert: function(userId, fileObj) {
return true;
},
update: function(userId, fileObj) {
return true;
},
remove: function(userId, fileObj) {
return true;
},
download: function(userId, fileObj /*, shareId*/) {
return true;
},
fetch: [] // ['owner']
});
订阅是这样的:
var i = -1,
array = [],
usrAvatarId = Meteor.users.find({"profile.avatar.type": "doc"}, {fields: {"profile.avatar.data": 1}}).fetch(),
nbAvatar = Meteor.users.find({"profile.avatar.type": "doc"}).count();
console.log(nbAvatar);
console.log(usrAvatarId);
while(++i < nbAvatar)
array.push(usrAvatarId[i]._id);
console.log(array);
Meteor.subscribe('images', array);
最后,出版物是这样的:
Meteor.publish('images', function(array){
console.log(array);
return Images.find({});
});
目标是将包含允许文件ID的数组作为参数传递。就像现在一样,我总是下载所有的收集文件。
当我记录colelction客户端时,我确实有一个带有_id属性的文件数组。
但是当我尝试这个时:
Meteor.publish('images', function(array){
console.log(array);
return Images.find({_id: {$in: array}});
});
我没有得到任何文件,认为服务器正确地记录了传递的数组。
我可能遗漏了一些东西:我不习惯FS.collection,而且到目前为止我的文档并不是最容易理解的......
关于允许/拒绝,我不认为这会改变一些东西,但我并没有将它们改变为我以前开始的来源。
有人可以帮忙吗?每个连接下载200个文件变得很无聊:/
谢谢
答案 0 :(得分:0)
基本上,您尝试进行联接,只下载与您要发布到客户端的用户相对应的图像。
更好,更简单,更快捷的方法是使用reywood:publish-composite包来获取发布用户的同一出版物中的图像。
我在自己的应用程序中使用FS.collection已经做了很长时间了,它运行得很好。