ได้ทุกอเมซอน S3 แฟ้มในถังภายในสัญญา

0

คำถาม

ฉันพยายามที่จะจับคนนับพันของแฟ้มจากอเมซอน S3 ภายในสัญญาแต่ฉันไม่สามารถดูเหมือนจะคิดให้ออกว่าจะรวม ContinuationToken ภายในหากรายการเป็น truncated และรวบรวมทั้งหมดมันด้วยกันภายในสัญญา ฉันเป็นสำหรับคอบ 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;
}

ฉันต้องการฟังก์ชันจะทำต่อไปหรือไม่ต้องหนีจนกระทั่งฉันสร้างรายการของวัตถุทั้งหมดอยู่ในถังที่จะกลับมา

amazon-web-services aws-sdk javascript
2021-10-25 16:01:51
2
0

คุณต้องการ ContinuationToken ครั้งที่สองอย่างเดียว

var params = {
    Bucket: bucket,
    MaxKeys: 5000,
};

if (data.IsTruncated) {
    s3.listObjectsV2({...params, ContinuationToken: data.NextContinuationToken})

IMO นี่มันเป็นแค่การ s3 ฟังก์ชันเรียกว่าสองครั้งมากกว่าเหมือนเป็นรอบการ โทรมา Recursion คือตอนที่เป็นฟังก์ชันยังเรียกตัวมันเอง จนกระทั่งกำหนดสภาพเป็นพบกัน

อ่านมากกว่าเรื่อง recursion: https://medium.com/@vickdayaram/recursion-caad288bf621

2021-10-25 16:29:42

พูดดีนี่/n-ผมจะปรับปรุงของฉันคำถามกับอีกข้อมูลเต็มสำหรับเรื่องนี้ ฉันต้องการฟังก์ชันจะทำต่อไปหรือไม่ต้องหนีจนกว่าแฟ้มทั้งหมดต้องถูกดึงข้อมูล.
AppleBaggins
0

ฉันสามารถแสดงรายการของวัตถุอยู่ในถังใช้ async/รอและรหัสทางด้านล่างจะ populate เป็นอาเรย์.

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;
}

ต้องขอบคุณทุกคนที่ช่วย!

2021-10-26 00:59:26

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่