您好我是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中创建任何集合。怎么了?
答案 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()一些值并在此之后显示上传屏幕