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);
}
});