Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

338
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!