gpt4 book ai didi

node.js - AWS Lambda 通过文件版本控制列出 S3 存储桶对象和子目录

转载 作者:太空宇宙 更新时间:2023-11-03 22:06:43 26 4
gpt4 key购买 nike

我是 lambda 新手,尝试列出具有嵌套子目录的 S3 存储桶对象,结构如下:

- mybucket/folder1/project1/samplev1.txt
- mybucket/folder1/project1/sampleVer2.txt
- mybucket/folder2/
- mybucket/folder3/

这是我的 lambda 代码:

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

exports.handler = async (event) => {
const allKeys = [];
await getKeys({ Bucket: 'ru-mybucket' }, allKeys);
console.log(allKeys)
return allKeys;
};

async function getKeys(params, keys){
const response = await s3.listObjectsV2(params).promise();
response.Contents.forEach(obj => keys.push(obj.Key));

if (response.IsTruncated) {
const newParams = Object.assign({}, params);
newParams.ContinuationToken = response.NextContinuationToken;
await getKeys(newParams, keys); // RECURSIVE CALL
}
}

该函数列出了我的存储桶中的所有对象键及其嵌套子目录和文件,问题是如何列出嵌套对象(包括其版本),我该如何实现这一点?在我的代码中添加 (listObjectVersions) 以便能够循环具有版本的对象?

最佳答案

我已经做到了code对于您来说,在此示例中您可以看到单元测试及其实现(apigateway)。

基本上,我从存储桶中检索了所有 key ,然后迭代它们。最后我得到了所有对象,并且我查询 s3.listObjectsV2 传递两个参数:存储桶和 key 。

下面是伪代码:

s3.listObjectsV2({ Bucket: your_bucket, MaxKeys: 1000 }).forEach( element => {
s3.listObjectVersions({ Bucket: your_bucket, Prefix: element.Key})
})

要运行代码示例,您必须运行以下命令:

npm install
npm run deploy

为此,您可以测试代码:

npm run test

别忘了放上你的水桶:

./package.json
./tests/test.js

重要:我使用了 serverless framework对于这个解决方案。

关于node.js - AWS Lambda 通过文件版本控制列出 S3 存储桶对象和子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53109644/

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