使用Lambda函数通过S3存储桶读取数据

时间:2020-01-13 06:51:14

标签: amazon-s3 aws-lambda

我正在尝试通过Lambda从s3存储桶读取数据,并且该文件是Excel文件(.xlsx) 但是当我打印流时它是空的。

const xlsx = require('xlsx');
const AWS = require('aws-sdk');
var ss = new AWS.S3();

exports.handler = async (event) => {

 var file = ss.getObject({ Bucket: 'kapoorbck', Key: 'testdata.xlsx' }).createReadStream();
//console.log(file);
   var buffers = [];

  file.on('data', (data) => {
    buffers.push(data);
  });
console.log(buffers);


file.on('end', function () {
    var buffer = Buffer.concat(buffers);
    var workbook = xlsx.read(buffer);
    //var sheet_name_list = workbook.SheetNames;

    console.log(workbook);
});



return{
  statusCode :200,
  body : "Success"
}

}

1 个答案:

答案 0 :(得分:0)

除了两件事之外,我没有发现核心逻辑有什么错

  1. 您正在尝试同步打印console.log(buffers);。从流中读取它是异步操作,因此console.log需要位于data事件监听器或end事件监听器中。
  2. 第二件事是您的return语句,它也位于结尾,因此将首先执行它,因为它不会等待异步操作完成。您需要将其移动到结束事件侦听器中,以便lambda知道何时返回并完成工作。

希望有帮助。