Em um projeto Node.js, estou tentando obter dados de S3.
Quando eu uso getSignedURL
, tudo funciona:
aws.getSignedUrl('getObject', params, function(err, url){
console.log(url);
});
Meus parâmetros são:
var params = {
Bucket: "test-aws-imagery",
Key: "TILES/Level4/A3_B3_C2/A5_B67_C59_Tiles.par"
Se eu pegar a saída do URL para o console e colá-la em um navegador da web, ele baixa o arquivo de que preciso.
No entanto, se tento usar getObject
, recebo todos os tipos de comportamento estranho. Eu acredito que estou apenas usando incorretamente. Isso é o que eu tentei:
aws.getObject(params, function(err, data){
console.log(data);
console.log(err);
});
Saídas:
{
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
Portanto, parece que isso está funcionando corretamente. No entanto, quando coloco um ponto de interrupção em um dos console.log
s, meu IDE (NetBeans) lança um erro e se recusa a mostrar o valor dos dados. Embora esse possa ser apenas o IDE, decidi tentar outras maneiras de usar getObject
.
aws.getObject(params).on('httpData', function(chunk){
console.log(chunk);
}).on('httpDone', function(data){
console.log(data);
});
Isso não produz nada. Colocar um ponto de interrupção em mostra que o código nunca atinge nenhum dos console.log
s. Eu também tentei:
aws.getObject(params).on('success', function(data){
console.log(data);
});
No entanto, isso também não produz nada e colocar um ponto de interrupção mostra que console.log
nunca foi alcançado.
O que estou fazendo errado?
aws
objeto é realmente uma nova instância doaws.S3
objeto? Além disso, a respostagetObject()
está sendo passada de volta para uma resposta http ou está sendo canalizada para um arquivo?