Tôi không biết nếu bạn có thể kiểm soát trước các loại lĩnh vực data.Body cung cấp trong getObject() gọi lại. Nếu tất cả những gì bạn muốn làm là xác định xem bạn đã nhận được bộ đệm hay chưa, bạn có thể thử phương thức lớp Node's Buffer.isBuffer (data.Body).
Cách khác, bạn có thể muốn tránh vấn đề này hoàn toàn và sử dụng phương pháp này từ Amazon 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);
Giả sử bạn sẽ được sử dụng mã này trong một môi trường callback Node.js async điển hình, nó có thể làm cho ý nghĩa hơn để xem mã như vậy:
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);
}
Nếu mã trên không tải xuống được, bạn làm cách nào để bẫy lỗi? – Mike
@Mike: Trước hoặc sau trình xử lý 'đóng', thêm một cái gì đó như: file.on ('error', function (err) {callback (err);}); – Bruce
Cảm ơn! Cảm ơn! Cảm ơn! – Mike