【问题标题】:Reading data through S3 bucket using lambda function使用 lambda 函数通过 S3 存储桶读取数据
【发布时间】:2020-04-29 21:03:15
【问题描述】:

我正在尝试通过 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"
}

}

【问题讨论】:

    标签: amazon-s3 aws-lambda


    【解决方案1】:

    我认为核心逻辑没有任何问题,除了两件事

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

    希望对你有帮助。

    【讨论】:

    • 你能提供我的代码吗?我是异步编程的新手,bieng 从事结构化编程,这个概念对我来说很难
    • 当然。给我一些时间。会放代码。同时尝试将您的回报放入结束事件侦听器中,并将您的控制台移动到数据事件侦听器中。
    猜你喜欢
    • 2017-09-28
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2015-04-30
    • 2020-01-25
    • 1970-01-01
    相关资源
    最近更新 更多