Reputation: 1167
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
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