gpt4 book ai didi

node.js - AWS Lambda 从 S3 解压到 S3

转载 作者:行者123 更新时间:2023-12-04 01:12:00 25 4
gpt4 key购买 nike

我正在尝试编写一个 Lambda 函数,该函数将一个 S3 目录中的 zip 文件解压缩并解压缩到另一个目录中。我在 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 中没有新文件出现。

最佳答案

没关系,我发现这个代码效果更好:

exports.handler = async (event) =>      {
const params = {
Key: zip_directory + "/" + zip_file,
Bucket: input_bucket
};

const zip = s3
.getObject(params)
.createReadStream()
.pipe(unzipper.Parse({ forceStream: true }));

const promises = [];

let num = 0;

for await (const e of zip) {
const entry = e;

const fileName = entry.path;
const type = entry.type;
if (type === 'File') {
const uploadParams = {
Bucket: output_bucket,
Key: output_directory + fileName,
Body: entry,
};

promises.push(s3.upload(uploadParams).promise());
num++;
} else {
entry.autodrain();
}
}

await Promise.all(promises);

};

关于node.js - AWS Lambda 从 S3 解压到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64594913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com