文件从 API 下载到 Meteor 服务器并上传到 S3

File download from API to Meteor server and upload to S3

我正在从我的 Meteor 服务器发送一个请求,通过 API 下载一个文件。然后我想将该文件上传到 S3。我不断收到以下 "NoSuchKey: The specified key does not exist." 我最初认为这可能是我的 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 code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment."

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 文件夹中,因为它可以从客户端访问。