【发布时间】:2021-09-21 13:49:55
【问题描述】:
我正在编写一个 lambda 函数,它从 DynamoDB 中获取数据并将其存储在一个数组中。现在我想从这个数组创建一个 CSV 文件并返回它。 (最好直接来自 lambda 函数,而不是上传到 s3 再分享链接)。任何想法,如何做到这一点?
到目前为止我的代码 -
import AWS from "aws-sdk";
import createError from "http-errors";
import commonMiddleware from "../lib/commonMiddleware";
const dynamodb = new AWS.DynamoDB.DocumentClient();
async function getFile(event, context) {
const { id: someId } = event.pathParameters;
let data;
const params = {
TableName: process.env.TABLE_NAME,
IndexName: "GSIsomeId",
KeyConditionExpression: "someId = :someId",
ExpressionAttributeValues: {
":someId": someId,
},
};
try {
const result = await dynamodb.query(params).promise();
data = result.Items;
} catch (error) {
console.error(error);
throw new createError.InternalServerError(error);
}
// data is array of objects which I can change to 2d array using Object.values()
// I want to create and return a CSV from this array
return {
statusCode: 200,
body: JSON.stringify(data),
};
}
export const handler = commonMiddleware(getFile);
【问题讨论】:
-
我相信这就是你所需要的。 stackoverflow.com/a/38245177/6520807
-
@ksaraiya 是的,这将创建一个 CSV 文件。但是如何使用 AWS Lambda 发送此文件作为响应?
-
@ErwinSmithAOT 生成 csv 数据,上传到 S3 存储桶(在上传函数的参数中使用 filename.csv 传递 csv 数据)并返回 S3 链接作为响应如果您想直接下载文件而不将其存储到 S3 bucket 然后更改响应标头并在响应中返回 csv 数据
标签: javascript node.js amazon-web-services aws-lambda