Javascript Meteor:无法使用CollectionFS将图像上载到S3

Javascript Meteor:无法使用CollectionFS将图像上载到S3,javascript,file-upload,meteor,amazon-s3,Javascript,File Upload,Meteor,Amazon S3,我正在尝试使用指南测试上传功能,唯一的例外是使用软件包。这对于简单的代码来说是非常基本的,但是我在客户端控制台上遇到了一个错误-error:Access denied。方法“insert”的受限集合上不允许设置验证程序。[403] 即使我以各种可能的方式设置了allow insert,也会出现此错误 这是我的客户代码: // client/images.js var imageStore = new FS.Store.S3("images"); Images = new FS.Collecti

我正在尝试使用指南测试上传功能,唯一的例外是使用软件包。这对于简单的代码来说是非常基本的,但是我在客户端控制台上遇到了一个错误-
error:Access denied。方法“insert”的受限集合上不允许设置验证程序。[403]

即使我以各种可能的方式设置了
allow insert
,也会出现此错误

这是我的客户代码:

// client/images.js
var imageStore = new FS.Store.S3("images");

Images = new FS.Collection("images", {
    stores: [imageStore],
    filter: {
        allow: {
            contentTypes: ['image/*']
        }
    }
});

Images.deny({
 insert: function(){
 return false;
 },
 update: function(){
 return false;
 },
 remove: function(){
 return false;
 },
 download: function(){
 return false;
 }
 });

Images.allow({
 insert: function(){
 return true;
 },
 update: function(){
 return true;
 },
 remove: function(){
 return true;
 },
 download: function(){
 return true;
 }
});
主页上有一个简单的文件输入按钮-

// client/home.js
'change .myFileInput': function(e, t) {
    FS.Utility.eachFile(e, function(file) {
        Images.insert(file, function (err, fileObj) {
          if (err){
             console.log(err)  // --- THIS is the error
          } else {
             // handle success depending what you need to do

            console.log("fileObj id: " + fileObj._id)
            //Meteor.users.update(userId, {$set: imagesURL});
          }
        });
     });
}
我已经在S3上设置了适当的策略和所有内容,但我认为这个错误与S3没有任何关系

// server/images.js
var imageStore = new FS.Store.S3("images", {
    accessKeyId: "xxxx",
    secretAccessKey: "xxxx",
    bucket: "www.mybucket.com"
});

Images = new FS.Collection("images", {
    stores: [imageStore],
    filter: {
        allow: {
            contentTypes: ['image/*']
        }
    }
});
我也适当地出版和订阅了这些藏品。我已经四处搜寻了几个小时,但似乎不知道发生了什么


编辑:我刚刚阅读了不安全的
包,现在一切正常。所以基本上,问题在于允许/拒绝规则,但实际上我正在这样做。我不确定它为什么不承认这些规则。

您需要在仅服务器代码中定义FS.Collection的规则。这些是应用于FS.Collection创建的基础Mongo.Collection的服务器端规则

最好的方法是将AWS密钥导出为以下环境变量:AWS\u ACCESS\u KEY\u ID、AWS\u SECRET\u ACCESS\u KEY,从FS.Store中删除accessKeyId和secretAccessKey选项,然后将FS.Collection构造函数调用移动到客户端和服务器上运行。页面上提到了使用env变量的便利性


除此之外,您还可以使用控制bucket名称,这在您希望根据环境使用不同的bucket时非常方便

您需要在纯服务器代码中定义FS.Collection的规则。这些是应用于FS.Collection创建的基础Mongo.Collection的服务器端规则

最好的方法是将AWS密钥导出为以下环境变量:AWS\u ACCESS\u KEY\u ID、AWS\u SECRET\u ACCESS\u KEY,从FS.Store中删除accessKeyId和secretAccessKey选项,然后将FS.Collection构造函数调用移动到客户端和服务器上运行。页面上提到了使用env变量的便利性


除此之外,您还可以使用控制bucket名称,这在您希望根据环境使用不同的bucket时非常方便

有关CollectionFS安全配置的更多详细信息,请参见上的wiki页面。有关CollectionFS安全配置的更多详细信息,请参见上的wiki页面