当前位置: 首页 > 面试题库 >

如何从Node.js中的S3 getObject获得响应?

劳韬
2023-03-14
问题内容

在一个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永远不会到达。

我究竟做错了什么?


问题答案:

当执行getObject()从S3
API,按照文档文件的内容都位于Body属性,您可以从您的样品输出看到。您应该具有类似于以下内容的代码

const aws = require('aws-sdk');
const s3 = new aws.S3(); // Pass in opts to S3 if necessary

var getParams = {
    Bucket: 'abc', // your bucket name,
    Key: 'abc.txt' // path to the object you're looking for
}

s3.getObject(getParams, function(err, data) {
    // Handle any error and exit
    if (err)
        return err;

  // No error happened
  // Convert Body from a Buffer to a String

  let objectData = data.Body.toString('utf-8'); // Use the encoding necessary
});

您可能不需要从data.Body对象创建新的缓冲区,但是如果需要,可以使用上面的示例来实现。



 类似资料:
  • 问题内容: 我想知道如何使用XMLHttpRequest加载远程URL的内容,并将所访问站点的HTML存储在JS变量中。 说,如果我想加载并Alert()的HTML,我该怎么做? 问题答案: 您可以在等于时得到它。 这是一个示例(与IE6 / 7不兼容)。 为了获得更好的跨浏览器兼容性,不仅可以与IE6/7兼容,而且还可以解决某些浏览器特定的内存泄漏或错误,并且为了降低触发Ajaxical请求的冗

  • 我试图从Web读取JSON数据,但该代码返回空结果。我不确定我做错了什么。

  • 如果我尝试实现一个自定义转换器(我在网上找到了一些例子),它会抱怨我没有实现抽象方法convert(F),而这些例子都没有实现。 谢了。

  • 问题内容: 我正在尝试为我公司正在开发的API编写包装器。这很安静,使用邮递员,我可以向用户端发送一个邮寄请求,例如使用用户名和密码作为POST数据,并且还给我一个令牌。所有工作均按预期进行。现在,当我尝试从PHP中进行操作时,我得到了一个对象,但似乎无法像在Postman请求中那样在其内部的任何地方找到令牌。 相关代码如下: 上面代码的输出看起来像(警告,文本输入墙): Postman的输出如下

  • 我正在使用Spring框架中的RestTemplate在Java中创建一个REST客户机。 一切都很好,直到我不得不用postForLocation发帖子。 我正在访问的Web服务返回一个json,其中包含关于POST操作的信息。 在PHP中这很好,但我真的不明白如何在Java中使用RestTemplate。 这将返回NULL。 使用相同的代码,但使用getForObject(当然,将URL更改为

  • 问题内容: 如何在Node.js中获得最准确的时间戳? ps我的Node.js版本是0.8.X,而node-microtime扩展名对我不起作用(安装时崩溃) 问题答案: ?这给您一个以毫秒为单位的时间戳,这是JS给您的最准确的时间戳。 更新:正如vaughan所述,它可以在Node.js中使用- 它的分辨率为纳秒,因此它的分辨率更高,这并不意味着它必须更精确。 PS .:为了更清楚一点,返回一个