我正在从Meteor服务器发送请求,要求通过API下载文件。然后,我想将该文件上传到S3。我不断收到以下“ NoSuchKey:指定的键不存在”。我最初以为我的AWS的AcessKey / SecretKey可能是个问题,但是在搜索了一段时间之后,我发现其他人遇到此错误的唯一示例是尝试从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包装传递给非流星库的回调。”
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');
});
最终为我解决问题的是将部分安装程序移至lib文件夹。尽管我尝试了几种不同的方式,但我无法使其完全在服务器上执行。看来该文档是最近更新的,它使所有内容都更加清楚了。如果您遵循此设置,则应消除该错误。请参阅标题为“客户端,服务器和S3凭据”的部分
https://github.com/CollectionFS/Meteor-CollectionFS/tree/master/packages/s3
注意:确保不要将密钥放置在lib文件夹中,因为可以从客户端访问它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句