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.logs, 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.logs. 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.lognunca se alcanza.
¿Qué estoy haciendo mal?
awsobjeto realmente una nueva instancia delaws.S3objeto? Además, ¿la respuestagetObject()se devuelve a una respuesta http o se envía a un archivo?