![](/img/trans.png)
[英]Get list of objects from s3 bucket (min.io or amazon) using promise
[英]Get all Amazon S3 files inside a bucket within Promise
我正在嘗試從 Promise 中的 Amazon S3 中獲取數千個文件,但我似乎無法弄清楚如果列表被截斷並將其全部收集在 Promise 中,如何在其中包含 ContinuationToken。 我是 JS 的新手,可以使用一些幫助。 到目前為止,這是我所擁有的:
getFiles()
.then(filterFiles)
.then(mapUrls)
;
function getFiles(token) {
var params = {
Bucket: bucket,
MaxKeys: 5000,
ContinuationToken: token
};
var allKeys = [];
var p = new Promise(function(resolve, reject){
s3.listObjectsV2(params, function(err, data) {
if (err) {
return reject(err);
}
allKeys.push(data.Contents)
if (data.IsTruncated) {
s3.listObjectsV2({Bucket: bucket, MaxKeys: 5000, ContinuationToken: data.NextContinuationToken})
console.log('Getting more images...');
allKeys.push(data.Contents)
}
resolve(data.Contents);
});
});
return p;
}
我需要該函數繼續運行,直到我創建了要返回的存儲桶中所有對象的列表。
您只需要第二次使用ContinuationToken 。
var params = {
Bucket: bucket,
MaxKeys: 5000,
};
if (data.IsTruncated) {
s3.listObjectsV2({...params, ContinuationToken: data.NextContinuationToken})
IMO,這只是一個被調用兩次的 s3 函數,更像是一個嵌套調用。 遞歸是指函數不斷調用自身直到滿足指定條件。
閱讀有關遞歸的更多信息: https : //medium.com/@vickdayaram/recursion-caad288bf621
我能夠使用 async/await 和下面的代碼列出存儲桶中的所有對象來填充數組。
async function getFiles(objects = []) {
const response = await s3.listObjectsV2(params).promise();
response.Contents.forEach(obj => filelist.push(obj.Key));
if (response.NextContinuationToken) {
params.ContinuationToken = response.NextContinuationToken;
await getFiles(params, objects);
}
console.log(filelist.length)
return filelist;
}
感謝所有幫助過的人!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.