什么是AWS S3桶响应中的Unit8Array

时间:2016-11-01 20:56:45

标签: javascript json node.js amazon-web-services amazon-s3

我正在调用AWS S3 getObject函数:(AWS.Request) getObject(params = {}, callback)

我写了这个:

getMenuJson() {
   this.s3.getObject({
     Bucket: 'improd-image-pipeline',
     Key: 'remoteUX/qa/menus/v1/menus.json',
     ResponseContentType: 'application/json',
   }, (err, data) => {
     if (err) {
       this.$log.log(err);
     } else {
       this.$log.log(data, JSON.parse(data.Body));
     }
   });
 }

这是控制台输出,我尝试在S3控制台上打印数据和实际的menus.json文件。 enter image description here

如果我这样打印返回数据:JSON.parse(data.Body),这就是结果。

 {  
   "menus":[  
      {  
         "name": "Flat Collections Example",
         "menuId": "aaa-3656-4a32-bdda-e2e016cf35ee"
      },
      {  
         "name":"P3",
         "menuId": "aaa-f5fc-4e18-9089-47e43a4237e8"
      },
      {  
         "name": "Tabbed Menu Example",
         "menuId": "aaa-768a-40bd-a9f4-b633f3679c36"
      }
   ]
}

但是,如何理解响应体:Unit8Array,以及如何将其解释为实际的json格式数据?

我正在使用Angular.toJson(data.Body)并且此函数不理解它,但JSON.parse(data.Body)将获得正确的结果。

2 个答案:

答案 0 :(得分:2)

它是一个JavaScript类型数组,表示一个8位无符号整数数组。

AWS.Request.getObject()返回data.Body的值可以是以下任何一种:Buffer,Typed Array,Blob,String,ReadableStream。

您可以查看AWS docs了解详情。

在您的情况下,它是 Uint8Array (JavaScript类型数组)。

了解更多:JavaScript Typed ArraysUint8Array object

答案 1 :(得分:-1)

我建议将AWS SDK用于javascript。 http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/working-with-json.html

AWS SDK for JavaScript为AWS服务提供JavaScript API。使用SDK,您可以为浏览器构建JavaScript应用程序。 JavaScript API允许开发人员构建使用AWS服务的库或应用程序。

要使用的脚本位于:https://sdk.amazonaws.com/js/aws-sdk-2.6.10.min.js