移除不安全的包后,Meteor Collection FS插入不起作用

时间:2015-08-12 14:50:02

标签: templates meteor collections insert fs

从标题中可以看出,删除不安全的软件包后,我的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

如果有人能帮助我,那会很好!

2 个答案:

答案 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();
});