Obține toate Amazon S3 fișiere în interiorul-o găleată în Promit

0

Problema

Încerc să iau mii de fișiere de pe Amazon S3 în termen de o Promisiune, dar eu nu pot par să dau seama cum de a include ContinuationToken în cazul în care lista este trunchiat și aduna toți împreună în promisiune. Eu sunt un novice cu JS și ar putea folosi de ajutor. Aici e ceea ce am, până acum:

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

Am nevoie de funcția de a continua să ruleze până când am creat o listă cu toate obiectele din găleată să se întoarcă.

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

Ai nevoie de ContinuationToken cel de-al doilea timp.

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

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

IMO, aceasta este doar un s3 funcția sunat de două ori, mai mult ca un imbricate apel. Recursivitatea este atunci când o funcție ține de asteptare sine până când o anumită condiție este îndeplinită.

Citeste mai multe despre recursivitate: https://medium.com/@vickdayaram/recursion-caad288bf621

2021-10-25 16:29:42

Bun punct - voi actualiza mea întrebare cu mai multe detalii. Am nevoie de funcția de a continua să ruleze până când toate fișierele au fost preluate.
AppleBaggins
0

Am fost capabil de a lista toate obiectele într-o găleată, folosind asincron/așteaptă și codul de mai jos pentru a popula o matrice.

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

Multumesc tuturor celor care au ajutat!

2021-10-26 00:59:26

În alte limbi

Această pagină este în alte limbi

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