0

我正在从我的 Meteor 服务器发送请求以通过 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 代码必须始终在 Fiber 中运行。尝试使用 Meteor.bindEnvironment 包装传递给非 Meteor 库的回调。”

API 文档中的 Node.js 示例

client.get_result(id, function(err, result){
        if (err != null) {            
            return;
        }

        file.writeFile(path.join('public', path.join('results', filename)), result, 'binary');
    });
4

1 回答 1

0

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

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

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

于 2016-01-14T02:33:28.723 回答