Meteor无法上传图片

时间:2014-12-07 13:04:08

标签: mongodb collections upload meteor

您好我是Meteor的新手,并尝试开发简单的文件/图片上传/下载。

我的代码和包:

meteor create testApp
meteor add cfs:standard-packages
meteor add cfs:filesystem

testApp.js

   YourFileCollection = new FS.Collection("yourFileCollection", {
            stores: [new FS.Store.FileSystem("yourFileCollection", {path: "~/meteor_uploads"})]
        });
if (Meteor.isClient) {
      // counter starts at 0
    Template.yourTemplate.events({
        'change .your-upload-class': function(event, template) {
            FS.Utility.eachFile(event, function(file) {
                var yourFile = new FS.File(file);
                yourFile.creatorId = Meteor.userId(); // add custom data
                YourFileCollection.insert(yourFile, function (err, fileObj) {
                    if (!err) {
                       // do callback stuff
                    }
                });
            });
        }
    });
    }

    if (Meteor.isServer) {
        YourFileCollection.allow({
            insert: function (userId, doc) {
                return !!userId;
            },
            update: function (userId, doc) {
                return doc.creatorId == userId
            },
            download: function (userId, doc) {
                return doc.creatorId == userId
            }
        });
    }

和html:

    <head>
  <title>protoSonn</title>
</head>

<body>
  <h1>Welcome to Meteor!</h1>

  {{> yourTemplate}}
</body>

<template name="yourTemplate">
    <input class="your-upload-class" type="file">
</template>

我的/ testApp / public文件夹中还有两个图像。 在我的公用文件夹中选择一个图像后,单击确定。什么都没发生。没有在mongodb中创建任何集合。怎么了?

1 个答案:

答案 0 :(得分:0)

首先,我发现您不是使用帐户包进行身份验证,而且您不需要将Meteor.userId()添加到您的集合中,其次是您有允许/拒绝规则,由于未包含帐户包,这些规则无法实现

第一个/简单的解决方案: 从代码中删除以下行

yourFile.creatorId = Meteor.userId(); // add custom data

并允许/拒绝规则

if (Meteor.isServer) {
        YourFileCollection.allow({
            insert: function (userId, doc) {
                return !!userId;
            },
            update: function (userId, doc) {
                return doc.creatorId == userId
            },
            download: function (userId, doc) {
                return doc.creatorId == userId
            }
        });
    }

以下是流星垫的工作代码:http://bit.ly/1u8gpOq
上传后,在开发控制台中使用以下命令检查文件 -

YourFileCollection.find().fetch()

第二个解决方案:

使用帐户包对您的应用进行身份验证,以便您获得Meteor.userId()一些值并在此之后显示上传屏幕