我仍然是NodeJ和AWS的新手,如果这是一个菜鸟问题,请原谅我。
我正在尝试从Excel文件(.xlsx)中读取数据。 lambda函数接收文件类型的扩展名。
这是我的代码:
exports.handler = async (event, context, callback) => {
console.log('Received event:', JSON.stringify(event, null, 2));
if (event.fileExt === undefined) {
callback("400 Invalid Input");
}
let returnData = "";
const S3 = require('aws-sdk/clients/s3');
const s3 = new S3();
switch(event.fileExt)
{
case "plain":
case "txt":
// Extract text
const params = {Bucket: 'filestation', Key: 'MyTXT.'+event.fileExt};
try {
await s3.getObject(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else{ // successful response
returnData = data.Body.toString('utf-8');
context.done(null, returnData);
}
}).promise();
} catch (error) {
console.log(error);
return;
}
break;
case "xls":
case "xlsx":
returnData = "Excel";
// Extract text
const params2 = {Bucket: 'filestation', Key: 'MyExcel.'+event.fileExt};
const readXlsxFile = require("read-excel-file/node");
try {
const doc = await s3.getObject(params2);
const parsedDoc = await readXlsxFile(doc);
console.log(parsedDoc)
} catch (err) {
console.log(err);
const message = `Error getting object.`;
console.log(message);
throw new Error(message);
}
break;
case "docx":
returnData = "Word doc";
// Extract text
break;
default:
callback("400 Invalid Operator");
break;
}
callback(null, returnData);
};
文本文件部分起作用。但是xlsx部分使函数超时。
我确实安装了read-excel-file
依赖项并上传了zip文件,以便可以访问它。
但是函数超时并显示以下消息:
"errorMessage": "2020-11-02T13:06:50.948Z 120bfb48-f29c-4e3f-9507-fc88125515fd Task timed out after 3.01 seconds"
任何帮助将不胜感激!谢谢您的时间。
答案 0 :(得分:0)
我将超时更改为20秒,并且可以正常工作。仅剩下一个问题:const parsedDoc = await readXlsxFile(doc);
希望接收字符串(文件路径)而不是文件。
答案 1 :(得分:0)
使用xlsx NPM库解决。使用流并为其提供缓冲区。