在一个Node.js项目中,我试图从S3取回数据。
当我使用时getSignedURL
,一切正常:
aws.getSignedUrl('getObject', params, function(err, url){
console.log(url);
});
我的参数是:
var params = {
Bucket: "test-aws-imagery",
Key: "TILES/Level4/A3_B3_C2/A5_B67_C59_Tiles.par"
如果将URL输出带到控制台并将其粘贴到Web浏览器中,它将下载所需的文件。
但是,如果我尝试使用,则会出现getObject
各种奇怪的行为。我相信我只是使用不正确。这是我尝试过的:
aws.getObject(params, function(err, data){
console.log(data);
console.log(err);
});
输出:
{
AcceptRanges: 'bytes',
LastModified: 'Wed, 06 Apr 2016 20:04:02 GMT',
ContentLength: '1602862',
ETag: '9826l1e5725fbd52l88ge3f5v0c123a4"',
ContentType: 'application/octet-stream',
Metadata: {},
Body: <Buffer 01 00 00 00 ... > }
null
因此看来这工作正常。但是,当我在console.log
s之一上设置断点时,我的IDE(NetBeans)会引发错误并拒绝显示数据值。尽管这可能只是IDE,但我还是决定尝试其他使用方式getObject
。
aws.getObject(params).on('httpData', function(chunk){
console.log(chunk);
}).on('httpDone', function(data){
console.log(data);
});
这不会输出任何内容。放置一个断点表明代码永远不会到达console.log
s中的任何一个。我也尝试过:
aws.getObject(params).on('success', function(data){
console.log(data);
});
但是,这也不会输出任何内容,并且放置断点表明console.log
永远不会到达。
我究竟做错了什么?
aws
对象实际上是该aws.S3
对象的新实例吗?另外,响应getObject()
是否被传递回http响应,还是通过管道传递到文件?