Node.js 和 Amazon S3:如何遍历存储桶中的所有文件?

新手上路,请多包涵

是否有任何适用于 Node.js 的 Amazon S3 客户端库允许列出 S3 存储桶中的所有文件?

最知名的 aws2jsknox 似乎没有这个功能。

原文由 nab 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 632
2 个回答

事实上, aws2js 支持通过 s3.get() 方法调用在低级别上列出存储桶中的对象。为此,必须通过 prefix 参数,该参数记录在 Amazon S3 REST API 页面上

 var s3 = require('aws2js').load('s3', awsAccessKeyId, awsSecretAccessKey);
s3.setBucket(bucketName);

var folder = encodeURI('some/path/to/S3/folder');
var url = '?prefix=' + folder;

s3.get(url, 'xml', function (error, data) {
    console.log(error);
    console.log(data);
});

上述代码段中的 data 变量包含 bucketName 存储桶中所有对象的列表。

原文由 nab 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用官方的 aws-sdk

 var allKeys = [];
function listAllKeys(marker, cb)
{
  s3.listObjects({Bucket: s3bucket, Marker: marker}, function(err, data){
    allKeys.push(data.Contents);

    if(data.IsTruncated)
      listAllKeys(data.NextMarker, cb);
    else
      cb();
  });
}

s3.listObjects

编辑 2017 年:相同的基本想法,但 listObjectsV2( ... ) 现在推荐并使用 ContinuationToken (参见 s3.listObjectsV2 ):

 var allKeys = [];
function listAllKeys(token, cb)
{
  var opts = { Bucket: s3bucket };
  if(token) opts.ContinuationToken = token;

  s3.listObjectsV2(opts, function(err, data){
    allKeys = allKeys.concat(data.Contents);

    if(data.IsTruncated)
      listAllKeys(data.NextContinuationToken, cb);
    else
      cb();
  });
}

原文由 Meekohi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题