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

1.3K
Vistas
Subir varios archivos a AWS S3 usando NodeJS

Estoy tratando de cargar todos los archivos dentro de mi directorio a mi depósito S3 usando NodeJS. Puedo cargar un archivo a la vez si doy explícitamente la ruta del archivo + cadena literal para el campo Key:

A continuación se muestra el script que estoy usando:

 var AWS = require('aws-sdk'), fs = require('fs'); // For dev purposes only AWS.config.update({ accessKeyId: '...', secretAccessKey: '...' }); // reg ex to match var re = /\.txt$/; // ensure that this file is in the directory of the files you want to run the cronjob on // ensure that this file is in the directory of the files you want to run the cronjob on fs.readdir(".", function(err, files) { if (err) { console.log( "Could not list the directory.", err) process.exit( 1 ) } var matches = files.filter( function(text) { return re.test(text) } ) console.log("These are the files you have", matches) var numFiles = matches.length if ( numFiles ) { // Read in the file, convert it to base64, store to S3 for( i = 0; i < numFiles; i++ ) { var fileName = matches[i] fs.readFile(fileName, function (err, data) { if (err) { throw err } // Buffer Pattern; how to handle buffers; straw, intake/outtake analogy var base64data = new Buffer(data, 'binary'); var s3 = new AWS.S3() s3.putObject({ 'Bucket': 'noonebetterhaventakenthisbucketnname', 'Key': fileName, 'Body': base64data, 'ACL': 'public-read' }, function (resp) { console.log(arguments); console.log('Successfully uploaded, ', fileName) }) }) } } })

Produce este error para cada archivo que se intenta cargar en S3:

 These are the files you have [ 'test.txt', 'test2.txt' ] { '0': null, '1': { ETag: '"2cad20c19a8eb9bb11a9f76527aec9bc"' } } Successfully uploaded, test2.txt { '0': null, '1': { ETag: '"2cad20c19a8eb9bb11a9f76527aec9bc"' } } Successfully uploaded, test2.txt

editar : actualizado usando un nombre de variable para permitir que se lea la clave en lugar de las matches[i]

¿Por qué solo carga test2.txt y cómo hago para que cargue cada archivo dentro de mi variable de matches ?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Hizo referencia a esta lectura asincrónica y almacenamiento en caché de varios archivos en nodejs para llegar a una solución.

tl;problema de alcance dr - necesidad de ajustar las variables en el cierre; puede hacer esto creando una función para readFile y s3.putObject y llamándola dentro del ciclo for.

 var AWS = require('aws-sdk'), fs = require('fs'); // For dev purposes only AWS.config.update({ accessKeyId: '...', secretAccessKey: '...' }); var s3 = new AWS.S3() function read(file) { fs.readFile(file, function (err, data) { if (err) { throw err } // Buffer Pattern; how to handle buffers; straw, intake/outtake analogy var base64data = new Buffer(data, 'binary'); s3.putObject({ 'Bucket': 'noonebetterhaventakenthisbucketnname', 'Key': file, 'Body': base64data, 'ACL': 'public-read' }, function (resp) { console.log(arguments); console.log('Successfully uploaded, ', file) }) }) } // reg ex to match var re = /\.txt$/; // ensure that this file is in the directory of the files you want to run the cronjob on fs.readdir(".", function(err, files) { if (err) { console.log( "Could not list the directory.", err) process.exit( 1 ) } var matches = files.filter( function(text) { return re.test(text) } ) console.log("These are the files you have", matches) var numFiles = matches.length if ( numFiles ) { // Read in the file, convert it to base64, store to S3 for( i = 0; i < numFiles; i++ ) { read(matches[i]) } } })
over 4 years ago · Santiago Trujillo 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