Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

339
Vistas
AWS S3: recupere varios archivos y combínelos después

Estoy tratando de extraer varios archivos del depósito de AWS S3 y estoy dispuesto a fusionar la respuesta de todos los archivos después.

Por ejemplo, tengo los siguientes archivos:

 my-bucket/mainfile1.json.gz my-bucket/mainfile2.json.gz my-bucket/mainfile3.json.gz

Actualmente estoy accediendo a un solo archivo como este:

 const unzipFromS3 = (key, bucket) => { return new Promise(async (resolve, reject) => { AWS.config.loadFromPath(process.env["PWD"]+'/private/awss3/s3_config.json'); var s3 = new AWS.S3(); let options = { 'Bucket': "my-bucket", 'Key': "mainfile1.json.gz", }; s3.getObject(options, function(err, res) { if(err) return reject(err); resolve(zlib.unzipSync(res.Body).toString()); }); }); }; unzipFromS3().then(function(result){ console.dir(result); });

Ahora bien, esto funciona perfectamente para un solo archivo, pero ¿cómo puedo lograr esto con varios archivos en caso de que quiera fusionar datos de 3 archivos separados?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Aquí hay una idea inicial de cómo leer los archivos JSON comprimidos con gzip de S3, descomprimirlos, luego combinar los objetos de JavaScript resultantes y, finalmente, comprimir y escribir los resultados combinados en S3.

 const aws = require('aws-sdk'); const zlib = require('zlib'); const s3 = new aws.S3(); const BUCKET = 'mybucket'; const PREFIX = ''; const FILES = ['test1.json.gz', 'test2.json.gz', 'test3.json.gz']; (async () => { const promises = []; try { for (let ii = 0; ii < FILES.length; ii++) { const params = { Bucket: BUCKET, Key: `${PREFIX}${FILES[ii]}`, }; console.log('Get:', params.Key, 'from:', params.Bucket); promises.push(s3.getObject(params).promise()); } const results = await Promise.all(promises); const buffers = results.map(result => result.Body); const content = buffers.map(buffer => JSON.parse(zlib.unzipSync(buffer).toString())); console.log('Read OK', JSON.stringify(content)); const merged = Object.assign({}, ...content); console.log('Merged content', JSON.stringify(merged)); const params = { Bucket: BUCKET, Key: `${PREFIX}result/test.json.gz`, Body: zlib.gzipSync(JSON.stringify(merged), 'utf8'), }; console.log('Put:', params.Key, 'to:', params.Bucket); const rc = await s3.putObject(params).promise() } catch (err) { console.log(err, err.stack); throw err; } })();
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda