我使用collectionFS进行文件上传,我的代码如下。记录的用户可以将图像插入图像集合,我也可以看到该文件已上传到服务器上。图像链接和下载按钮显示在删除不安全的包之前能够看到图像和下载。从项目中删除不安全的包之后。图像不显示也下载不工作(可以检索图像名称和URL),接收访问被拒绝403错误。我真正想要的是签名用户可以将文件插入服务器,每个人都可以看到图像,也可以下载文件。我写了允许规则,还发布和订阅。这有什么问题?
js文件
if (Meteor.isClient) {
Template.myForm.events({
'change .myFileInput': function(event, template) {
FS.Utility.eachFile(event, function(file) {
var fsFile = new FS.File(event.target.files[0]);
fsFile.owner = Meteor.userId();
Images.insert(file, function (err, fileObj) {
//If !err, we have inserted new doc with ID fileObj._id, and
//kicked off the data upload using HTTP
});
});
}
});
Template.imageView.helpers({
images: function () {
return Images.find(); // Where Images is an FS.Collection instance
}
});
Meteor.subscribe('images');
}
if (Meteor.isServer) {
Meteor.startup(function () {
// code to run on server at startup
});
Meteor.publish('images', function(){
return Images.find();
});
}
Images = new FS.Collection("images", {
stores: [new FS.Store.FileSystem("images", {path: "~/uploaded"})],
});
Images.allow({
insert: function(userId, doc){
return !!userId;
},
update: function(userId, doc){
return !!userId;
},
remove: function(userId, doc){
return false;
}
});
html文件
<head>
<title>uploader</title>
</head>
<body>
{{> loginButtons}}
{{> imageView}}
{{>myForm}}
</body>
<template name="imageView">
<div class="imageView">
{{#each images}}
<div>
<a href="{{this.url}}" target="_blank"><img src="{{this.url}}" alt="" class="thumbnail" />{{this.url}}</a><br/>
<strong>{{this.name}}</strong> <a href="{{this.url download=true}}" class="btn btn-primary">Download</a>
</div>
{{/each}}
</div>
</template>
<template name="myForm">
<p>
Please specify a file, or a set of files:<br>
<input type="file" name="datafile" class="myFileInput">
</p>
</template>
答案 0 :(得分:19)
如果您关闭了不安全和自动发布,并且通过订阅访问了您的文件,我相信您只需要允许哈希中的下载变量。
Uploads.allow({
insert:function(userId,project){
return true;
},
update:function(userId,project,fields,modifier){
return true;
},
remove:function(userId,project){
return true;
},
download:function(){
return true;
}
});