W projekcie Node.js próbuję odzyskać dane z S3.
Kiedy używam getSignedURL
, wszystko działa:
aws.getSignedUrl('getObject', params, function(err, url){
console.log(url);
});
Moje parametry to:
var params = {
Bucket: "test-aws-imagery",
Key: "TILES/Level4/A3_B3_C2/A5_B67_C59_Tiles.par"
Jeśli wezmę wyjście URL do konsoli i wkleię je w przeglądarce internetowej, pobierze potrzebny plik.
Jednak jeśli próbuję użyć getObject
, otrzymuję różne dziwne zachowanie. Uważam, że po prostu używam go nieprawidłowo. Oto, czego próbowałem:
aws.getObject(params, function(err, data){
console.log(data);
console.log(err);
});
Wyjścia:
{
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
Wygląda więc na to, że to działa poprawnie. Jednak kiedy umieszczam punkt przerwania na jednym z console.log
s, moje IDE (NetBeans) zgłasza błąd i odmawia pokazania wartości danych. Chociaż może to być po prostu IDE, zdecydowałem się wypróbować inne sposoby użycia getObject
.
aws.getObject(params).on('httpData', function(chunk){
console.log(chunk);
}).on('httpDone', function(data){
console.log(data);
});
To nic nie daje. Umieszczenie punktu przerwania w pokazuje, że kod nigdy nie osiągnie żadnego z plików console.log
s. Próbowałem też:
aws.getObject(params).on('success', function(data){
console.log(data);
});
Jednak to również nic nie wyświetla, a umieszczenie punktu przerwania pokazuje, że console.log
nigdy nie został osiągnięty.
Co ja robię źle?
aws
obiekt jest rzeczywiście nową instancjąaws.S3
obiektu? Ponadto, czy odpowiedźgetObject()
jest przekazywana z powrotem do odpowiedzi http, czy też jest przesyłana potokiem do pliku?