从API下载文件到流星服务器,并上传到S3



我正在从我的流星服务器发送一个请求,通过API下载文件。然后我想将该文件上传到S3。我一直得到以下"NoSuchKey:指定的密钥不存在。"我最初认为这可能是我的AcessKey/SecretKey表单AWS的问题,但在谷歌搜索了一段时间后,我能找到的其他人得到这个错误的唯一例子是当试图从S3下载文件时。

设置cfs:s3

var imageStore = new FS.Store.S3("images", {
  accessKeyId: "MyAcessKeyId", //required if environment variables are not set
  secretAccessKey: "MySecretAcessKey", //required if environment variables are not set
  bucket: "BucketName", //required
});
Images = new FS.Collection("images", {
  stores: [imageStore]
});

从API开始文件传输并上传到S3

client.get_result(id, Meteor.bindEnvironment(function(err, result){ //result is the download stream and id specifies which file to download.
  if (err !== null){
    return;
  } 
   var file = new FS.File(result);
   Images.insert(file, function (err, fileObj) {
    if (err){
      console.log(err);
    }
  });
}));

注意:我得到以下错误,所以我添加了Meteor.bindEnvironment。"流星代码必须始终在光纤中运行。尝试用Meteor.bindEnvironment包装传递给非meteor库的回调函数。"

Node.js示例来自API文档

client.get_result(id, function(err, result){
        if (err != null) {            
            return;
        }
        file.writeFile(path.join('public', path.join('results', filename)), result, 'binary');
    });

最终为我解决了这个问题,将部分设置移动到lib文件夹。尽管我尝试了几种不同的方法,但还是无法让它完全在服务器上执行。看起来文档最近更新了,它更清楚地说明了一切。如果按照这个设置,应该可以消除错误。参见客户端、服务器和S3凭据

https://github.com/CollectionFS/Meteor-CollectionFS/tree/master/packages/s3

注意:请确保不要将您的密钥不在您的lib文件夹中,因为这可以从客户端访问。

最新更新