In un progetto Node.js sto tentando di recuperare i dati da S3.
Quando lo uso getSignedURL
, tutto funziona:
aws.getSignedUrl('getObject', params, function(err, url){
console.log(url);
});
I miei parametri sono:
var params = {
Bucket: "test-aws-imagery",
Key: "TILES/Level4/A3_B3_C2/A5_B67_C59_Tiles.par"
Se porto l'URL di output sulla console e lo incollo in un browser web, scarica il file di cui ho bisogno.
Tuttavia, se provo a utilizzare getObject
ottengo tutti i tipi di comportamenti strani. Credo di usarlo solo in modo errato. Questo è quello che ho provato:
aws.getObject(params, function(err, data){
console.log(data);
console.log(err);
});
Uscite:
{
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
Quindi sembra che funzioni correttamente. Tuttavia, quando inserisco un punto di interruzione su uno dei messaggi console.log
, il mio IDE (NetBeans) genera un errore e si rifiuta di mostrare il valore dei dati. Anche se questo potrebbe essere solo l'IDE, ho deciso di provare altri modi per utilizzarlo getObject
.
aws.getObject(params).on('httpData', function(chunk){
console.log(chunk);
}).on('httpDone', function(data){
console.log(data);
});
Questo non produce nulla. Mettere un punto di interruzione in mostra che il codice non raggiunge mai nessuno dei console.log
s. Ho anche provato:
aws.getObject(params).on('success', function(data){
console.log(data);
});
Tuttavia, anche questo non restituisce nulla e l'inserimento di un punto di interruzione mostra che console.log
non viene mai raggiunto.
Che cosa sto facendo di sbagliato?
aws
oggetto è effettivamente una nuova istanzaaws.S3
dell'oggetto? Inoltre, la rispostagetObject()
viene ritrasmessa a una risposta http o viene reindirizzata a un file?