Quiero obtener recursivamente todos los archivos en una carpeta de depósito S3. Quiero lograr el mismo comportamiento que el ls -R en Linux.
Aquí hay una ilustración
my_folder |_abc | |_abc_file.txt | |_xyz | |_xyz_file.txt | |_file.txtTeniendo en cuenta la estructura de directorios anterior. si lo hago
const data = await s3.listObjectsV2({ Prefix: 'my_folder/', Bucket: bucket, Delimiter: `/`, }).promise(); Actualmente, obtengo los siguientes data :
-CommonPrefixes: ["abc"] -Contents:["file.txt"]El comportamiento esperado es:
- Contents: ["abc/abc_file.txt", "abc/xyz/xyz_file.txt", "file.txt"]Intenté usar las funciones del generador ES6 y las funciones recursivas para resolver este problema y terminé con un montón de código desordenado.
Estoy usando el SDK del nodo S3
Amazon S3 es un sistema de almacenamiento de objetos planos que no utiliza directorios. En cambio, la clave (nombre de archivo) de un objeto incluye la ruta completa del objeto. Los directorios "aparecen" mágicamente en función de las rutas de los objetos existentes y pueden desaparecer más tarde cuando no hay objetos en esa ruta.
Un CommonPrefix es el equivalente de Amazon S3 de mostrar un subdirectorio.
Al llamar a ListObjects() con un parámetro Delimiter (por ejemplo, Delimiter='/' ), se devuelve una lista de subdirectorios en el campo CommonPrefixes . Esto permite la recursión a través de directorios de forma muy similar a los sistemas de almacenamiento tradicionales. Si elimina este parámetro, se devolverán todos los objetos con el prefijo dado, en lugar de solo el 'directorio actual'.