AWS开发工具包getOjbect不会返回文件

时间:2018-03-20 12:33:22

标签: javascript amazon-web-services aws-sdk

我使用AWS SDK从S3存储桶中检索数据,但我得到的响应不包含任何数据。

这是我的代码:

const init = (S3_REGION) => {
    AWS.config.update({
            'region': S3_REGION
        }
    );
    return new AWS.S3();
};

const getFileFromAWS = async (S3_REGION, S3_BUCKET) => {
    const s3 = init(S3_REGION);
    const params = {
      Bucket: S3_BUCKET,
      Key: "filename.txt"
    };
    try{
        const awsResponse = await s3.getObject(params);
        logger.info(awsResponse);
    }catch(error){
      logger.error('Failed to get file');
    }
};

响应返回' data:null',如果我发送curl请求,我会得到该文件。 请注意,我只发送'区域'因为我在env中运行,其中所有其他变量都已设置好,我只需要传递该区域。

我从getObject获得的响应

    "Body ": {
    "type ": "Buffer ",
    "data ": [
        115,
        97,
        108,
        116,
        10
    ]
}

如何将其转换为字符串? 请指教。

1 个答案:

答案 0 :(得分:2)

getObject()方法返回一个AWS.Request对象,它不是一个promise。你应该使用:

const rsp = await s3.getObject(params).promise()

要将下载文件的内容检索为文本字符串,可以使用以下变体:

const txt = rsp.Body.toString('utf-8') 

有关在JavaScript SDK中使用promises的更多详细信息,请参阅here