Obtener todos los de Amazon S3 archivos dentro de un cubo dentro de la Promesa

0

Pregunta

Estoy tratando de apoderarse de miles de archivos de Amazon S3 dentro de una Promesa, pero me parece que no puede averiguar cómo incluir la ContinuationToken dentro de si la lista se trunca y se reúnen todos juntos dentro de la promesa. Soy un novato con JS y podría utilizar un poco de ayuda. He aquí lo que tengo hasta ahora:

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

Necesito la función de continuar la ejecución hasta que he creado una lista de todos los objetos en el cubo para volver.

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

Usted necesita ContinuationToken el segundo tiempo sólo.

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

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

De la OMI, esto es sólo un s3 función de llamada dos veces, más como un anidados de la llamada. La recursividad es cuando una función evita que se llama a sí mismo hasta que se cumpla una condición especificada.

Lea más acerca de la recursividad: https://medium.com/@vickdayaram/recursion-caad288bf621

2021-10-25 16:29:42

Buen punto - voy a actualizar mi pregunta con más detalle. Necesito la función de continuar la ejecución hasta que todos los archivos han sido recuperados.
AppleBaggins
0

Yo era capaz de enumerar todos los objetos en el cubo de uso de async/await y el código de abajo para rellenar una matriz.

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

Gracias a todos los que ayudaron!

2021-10-26 00:59:26

En otros idiomas

Esta página está en otros idiomas

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