我从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.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');
});
答案 0 :(得分:0)
最终解决这个问题的方法是将部分设置移到lib文件夹中。虽然我尝试了几种不同的方法,但我无法让它完全在服务器上执行。看起来最近更新的文档更清楚地说明了所有内容。如果您按照此设置,它应该消除错误。请参阅标题为客户端,服务器和S3凭据
的部分https://github.com/CollectionFS/Meteor-CollectionFS/tree/master/packages/s3
注意:请确保不要将密钥放在您的lib文件夹中,因为可以从客户端访问。