Как читать данные Excel, используя S3-подписанный URL-адрес в лямбде? - PullRequest
0 голосов
/ 03 января 2019

У меня есть один файл, хранящийся в корзине s3, и я написал лямбда-функцию, которая дает нам подписанный URL, а затем пытается использовать xlsx для чтения данных из подписанного URL. Но это не работает, ниже приведен код:

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);
  }
});
};

Невозможно прочитать файл. Ошибка "Не найден файл". Выдает даже те же URL-адреса в браузере. Спасибо

1 Ответ

0 голосов
/ 03 января 2019

Похоже, вам нужно что-то вроде этого:

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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...