Non so se è possibile controllare in anticipo il tipo di dati. Campo di dati fornito nel callback getObject(). Se tutto quello che vuoi fare è determinare se hai ricevuto un buffer, puoi provare il metodo di classe Node's Buffer.isBuffer (data.body).
In alternativa, si potrebbe desiderare di evitare il problema del tutto e utilizzare questo approccio da S3 documentation di Amazon:
var s3 = new AWS.S3();
var params = {Bucket: 'myBucket', Key: 'myImageFile.jpg'};
var file = require('fs').createWriteStream('/path/to/file.jpg');
s3.getObject(params).createReadStream().pipe(file);
Presumendo che verrà usato questo codice in un ambiente tipico node.js asincrona richiamata, potrebbe avere più senso per vedere il codice in questo modo:
var fs = require('fs');
function downloadFile(key, localPath, callback) {
var s3 = new AWS.S3();
var params = {Bucket: 'myBucket', Key: key};
var file = fs.createWriteStream(localPath);
file.on('close') {
callback();
}
file.on('error', function(err) {
callback(err);
});
s3.getObject(params).createReadStream().pipe(file);
}
Se il codice di cui sopra non riesce a scaricare, come si intercetta l'errore? – Mike
@Mike: prima o dopo il gestore 'close', aggiungi qualcosa come: file.on ('error', function (err) {callback (err);}); – Bruce
Grazie! Grazie! Grazie! – Mike