vimal mishra
vimal mishra

Reputation: 1167

How to read excel data using S3 bucket signed URL in lambda?

I have one file stored in s3 bucket and written the lambda function to give us the signed URL and then trying to use xlsx to read the data from the signed URL.But it is not working,Below is the code:

exports.handler = (event, context, callback) => {
var params = {
  Bucket: "abc", 
  Key: "xyz.xls"
};
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
var url = s3.getSignedUrl('getObject', params, function(err,data){
  if(err){
    console.log(err, err.stack);
    callback(err,null);
  }else{
    var XLSX = require('xlsx')
    var workbook = XLSX.readFile(data);
    var sheet_name_list = workbook.SheetNames;
    var xlData = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[2]]);  
    var res = {
        statusCode:200,
        body:JSON.stringify(xlData)
    }
    callback(null,res);
  }
});
};

It is not able to read the file.File not found error it throws even same URL woks in browser.Thanks

Upvotes: 0

Views: 2561

Answers (1)

Vasyl Moskalov
Vasyl Moskalov

Reputation: 4630

Looks like you need something like this:

var XLSX = require('xlsx'), request = require('request');
request(url, {encoding: null}, function(err, res, data) {
    if(err || res.statusCode !== 200) {
        callback(err,null);
        return;
    }

    /* data is a node Buffer that can be passed to XLSX.read */
    var workbook = XLSX.read(data, {type:'buffer'});
    var sheet_name_list = workbook.SheetNames;
    var xlData = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[2]]);  
    var res = {
        statusCode:200,
        body:JSON.stringify(xlData)
    }
    callback(null,res);
});

Upvotes: 1

Related Questions