En un proyecto de Node.js, estoy intentando recuperar datos de S3.
Cuando lo uso getSignedURL
, todo funciona:
aws.getSignedUrl('getObject', params, function(err, url){
console.log(url);
});
Mis params son:
var params = {
Bucket: "test-aws-imagery",
Key: "TILES/Level4/A3_B3_C2/A5_B67_C59_Tiles.par"
Si llevo la salida de la URL a la consola y la pego en un navegador web, descarga el archivo que necesito.
Sin embargo, si trato de usarlo getObject
, obtengo todo tipo de comportamiento extraño. Creo que lo estoy usando incorrectamente. Esto es lo que he probado:
aws.getObject(params, function(err, data){
console.log(data);
console.log(err);
});
Salidas:
{
AcceptRanges: 'bytes',
LastModified: 'Wed, 06 Apr 2016 20:04:02 GMT',
ContentLength: '1602862',
ETag: '9826l1e5725fbd52l88ge3f5v0c123a4"',
ContentType: 'application/octet-stream',
Metadata: {},
Body: <Buffer 01 00 00 00 ... > }
null
Entonces parece que esto está funcionando correctamente. Sin embargo, cuando pongo un punto de interrupción en uno de los console.log
s, mi IDE (NetBeans) arroja un error y se niega a mostrar el valor de los datos. Si bien este podría ser solo el IDE, decidí probar otras formas de uso getObject
.
aws.getObject(params).on('httpData', function(chunk){
console.log(chunk);
}).on('httpDone', function(data){
console.log(data);
});
Esto no genera nada. Poner un punto de interrupción muestra que el código nunca llega a ninguno de los console.log
s. También probé:
aws.getObject(params).on('success', function(data){
console.log(data);
});
Sin embargo, esto tampoco genera nada y colocar un punto de interrupción muestra que console.log
nunca se alcanza.
¿Qué estoy haciendo mal?
aws
objeto realmente una nueva instancia delaws.S3
objeto? Además, ¿la respuestagetObject()
se devuelve a una respuesta http o se envía a un archivo?