【发布时间】:2021-02-12 02:54:24
【问题描述】:
我正在尝试编写一个 Lambda 函数,将 zip 文件解压缩到一个 S3 目录中并解压缩到另一个目录中。我在 Python 中工作过,但我的团队中没有其他人喜欢 Python,所以我将其转换为我不太擅长的 Node.js。
我正在尝试使用 unzipper 包,我可以使用 unzipper.Open.S3 获取 zip 文件中的文件列表,但我不知道如何流式传输 zip 文件中的文件进入 S3。
代码的肉看起来像
const directory = await unzipper.Open.s3(s3,{Bucket: bucket, Key: zip_file});
directory.files.forEach(file => {
console.log("file name = " + file.path + ", type = " + file.type)
const key = dir[0] + "/output/" + file.path;
const params = { Bucket: bucket, Key: key };
const { writeStream, promise } = uploadStream(params)
file.stream().pipe(writeStream);
promise.then(() => {
console.log('upload completed successfully');
}).catch((err) => {
console.log('upload failed.', err.message);
});
});
const uploadStream = ({ Bucket, Key }) => {
const pass = new stream.PassThrough();
return {
writeStream: pass,
promise: s3.upload({ Bucket, Key, Body: pass }).promise()
};
}
我得到了每个文件的 console.log,但 promise.then 和 .catch 中的日志都没有出现,S3 中也没有出现新文件。
【问题讨论】:
标签: node.js amazon-web-services amazon-s3 aws-lambda