S3的node.js API对getObject回调中返回的数据提供以下描述。从http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property:



这是真的吗?没有办法控制这些东西是什么?

最佳答案

我不知道您是否可以预先控制getObject()回调中提供的data.Body字段的类型。如果您要做的只是确定是否已收到缓冲区,则可以尝试使用Node's Buffer.isBuffer(data.Body)类方法。

或者,您可能希望完全避免该问题,并从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);

假设您将在典型的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);
}

关于node.js - 如何确定S3.getObject()中的数据类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25812384/

10-11 08:58