Не знаю, можете ли вы заранее управлять типом поля данных.Body, указанным в обратном вызове getObject(). Если все, что вы хотите сделать, это определить, получили ли вы буфер, вы можете попробовать метод класса Node's Buffer.isBuffer (data.Body).
В качестве альтернативы, вы можете захотеть, чтобы избежать проблемы в целом и использовать этот подход от S3 documentation Амазонки:
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);
Предполагая, что вы будете использовать этот код в типичной среде обратного вызова Node.js асинхронным, это может сделать больше смысла, чтобы увидеть код так:
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);
}
Если приведенный выше код не загружается, как вы замаскируете ошибку? – Mike
@Mike: до или после обработчика «закрыть» добавьте что-то вроде: file.on ('error', function (err) {callback (err);}); – Bruce
Спасибо! Благодаря! Благодаря! – Mike