提问人:jos j 提问时间:10/26/2023 更新时间:10/26/2023 访问量:42
使用 AWS Lambda 将 Excel 流式传输到 AWS S3
streaming excel to aws s3 using aws lambda
问:
我正在从数据库获取一些数据,创建一个 Excel 工作表流式传输并使用 AWS Lambda 上传到 AWS S3
const date = new Date().toISOString().split('T')[0];
const fileName = `reports/${date}/applications.xlsx`;
const passThrough = new stream.PassThrough();
const workbook = new ExcelJS.stream.xlsx.WorkbookWriter({
stream: passThrough,
useStyles: true
});
const worksheet = workbook.addWorksheet('Applications');
const headers = Object.keys(applications[0]);
worksheet.addRow(headers);
for (let application of applications) {
const row = headers.map(header => {
if (hyperlinkHeaders.includes(header)) {
return { text: application[header], hyperlink: application[header] };
}
return application[header];
});
worksheet.addRow(row);
}
await workbook.commit();
const uploadCommand = new PutObjectCommand({
Bucket: BUCKET_NAME,
Key: fileName,
Body: passThrough,
ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
});
await s3.send(uploadCommand);
但是我遇到了一些错误。无法弄清楚我在做什么 START 请求 Id:版本:$LATEST 2023-10-26T08:31:47.125Z 错误 NotImplemented:您提供的标题意味着未实现的功能 在 throwDefaultError (/var/runtime/node_modules/@aws-sdk/smithy-client/dist-cjs/default-error-handler.js:8:22) 在 /var/runtime/node_modules/@aws-sdk/smithy-client/dist-cjs/default-error-handler.js:18:39 在 de_PutObjectCommandError (/var/runtime/node_modules/@aws-sdk/client-s3/dist-cjs/protocols/Aws_restXml.js:5721:12) 在 process.processTicksAndRejections (node:internal/process/task_queues:95:5) 在异步 /var/runtime/node_modules/@aws-sdk/middleware-serde/dist-cjs/deserializerMiddleware.js:7:24 在 async /var/runtime/node_modules/@aws-sdk/middleware-signing/dist-cjs/awsAuthMiddleware.js:14:20 在异步 /var/runtime/node_modules/@aws-sdk/middleware-retry/dist-cjs/retryMiddleware.js:27:46 在异步 /var/runtime/node_modules/@aws-sdk/middleware-flexible-checksums/dist-cjs/flexibleChecksumsMiddleware.js:58:20 在异步 /var/runtime/node_modules/@aws-sdk/middleware-logger/dist-cjs/loggerMiddleware.js:7:26 在 async Runtime.handler (file:///var/task/index.mjs:104:13) { '$fault': '客户端', '$metadata':{ httpStatusCode:501, requestId: '', extendedRequestId: '', cfId:未定义, 尝试次数: 1, totalRetryDelay:0 }, 代码: 'NotImplemented', 标头: 'Transfer-Encoding',
答:
const uploadCommand = new PutObjectCommand({ 铲斗:BUCKET_NAME, 键:fileName, 正文:直通, 内容类型: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 内容长度:passThrough.readableLength });
添加 ContentLength: passThrough.readableLength 解决了问题
评论