nodejs node listobjects dynamodb aws javascript node.js amazon-s3 amazon-web-services

javascript - listobjects - Cargue un archivo binario en S3 usando AWS SDK para Node.js



aws-sdk typescript (3)

Actualización: para referencia futura, Amazon ha actualizado la documentación de lo que estaba allí en el momento de preguntar. Según el comentario de @Loren Segal a continuación: -

Hemos corregido los documentos en la última versión preliminar para documentar este parámetro correctamente. Perdón por la confusión!

Estoy probando la vista previa del desarrollador del AWS SDK para Node.Js y quiero subir un tarball comprimido a S3 usando putObject .

De acuerdo con la documentación , el parámetro Body debe ser ...

Cuerpo - (Datos Codificados Base64)

... por lo tanto, estoy probando el siguiente código ...

var AWS = require(''aws-sdk''), fs = require(''fs''); // For dev purposes only AWS.config.update({ accessKeyId: ''key'', secretAccessKey: ''secret'' }); // Read in the file, convert it to base64, store to S3 fs.readFile(''myarchive.tgz'', function (err, data) { if (err) { throw err; } var base64data = new Buffer(data, ''binary'').toString(''base64''); var s3 = new AWS.S3(); s3.client.putObject({ Bucket: ''mybucketname'', Key: ''myarchive.tgz'', Body: base64data }).done(function (resp) { console.log(''Successfully uploaded package.''); }); });

Aunque puedo ver el archivo en S3, si lo descargo e intento descomprimirlo, aparece un error que indica que el archivo está dañado. Por lo tanto, parece que mi método para ''datos codificados en base64'' está desactivado.

¿Puede alguien ayudarme a subir un archivo binario usando putObject ?


Esta es una forma de enviar un archivo utilizando secuencias, lo que podría ser necesario para archivos grandes y generalmente reducirá la sobrecarga de memoria:

var AWS = require(''aws-sdk''), fs = require(''fs''); // For dev purposes only AWS.config.update({ accessKeyId: ''key'', secretAccessKey: ''secret'' }); // Read in the file, convert it to base64, store to S3 var fileStream = fs.createReadStream(''myarchive.tgz''); fileStream.on(''error'', function (err) { if (err) { throw err; } }); fileStream.on(''open'', function () { var s3 = new AWS.S3(); s3.putObject({ Bucket: ''mybucketname'', Key: ''myarchive.tgz'', Body: fileStream }, function (err) { if (err) { throw err; } }); });


No necesita convertir el búfer en una cadena base64. Simplemente configure el cuerpo de datos y funcionará.


Pude subir mi archivo binario de esta manera.

var fileStream = fs.createReadStream("F:/directory/fileName.ext"); var putParams = { Bucket: s3bucket, Key: s3key, Body: fileStream }; s3.putObject(putParams, function(putErr, putData){ if(putErr){ console.error(putErr); } else { console.log(putData); } });