【发布时间】:2016-08-24 20:34:22
【问题描述】:
在一个 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.logs 之一上设置断点时,我的 IDE (NetBeans) 会引发错误并拒绝显示数据的值。虽然这可能只是 IDE,但我决定尝试其他方式来使用 getObject。
aws.getObject(params).on('httpData', function(chunk){
console.log(chunk);
}).on('httpDone', function(data){
console.log(data);
});
这不会输出任何东西。设置断点表明代码永远不会到达console.logs 中的任何一个。我也试过:
aws.getObject(params).on('success', function(data){
console.log(data);
});
但是,这也不会输出任何内容,并且放置断点表明永远不会到达 console.log。
我做错了什么?
【问题讨论】:
-
您的
aws对象实际上是aws.S3对象的新实例吗?另外,来自getObject()的响应是传回一个http响应还是通过管道传输到一个文件? -
@peteb
aws = new AWS.S3()。响应不应通过管道传输到文件。我需要在 Javascript 中使用它 -
那么假设内容是 JSON 或 XML 是否安全?
-
@peteb 都不是,它们是自定义文件格式
-
显示您在
getObject()调用中使用的参数。如果您尝试将签名的 URL 传递给 getObject,我认为这行不通。
标签: javascript node.js amazon-s3 aws-sdk aws-sdk-nodejs