我需要使用aws-sdk-js从S3存储桶下载一些大型图像。到目前为止,我通过调用s3.getObject(params, function (err, data)来实现。循环访问列表中的每个文件?除了在aws-sdk-js中逐个下载文件之外,还有其他更快,更有效的方法来下载文件吗?

最佳答案

基本上,您希望在s3存储桶上同步目录

您可以使用AWS CLI中的aws s3 sync或s3cmd CLI中的s3cmd put --recursive

如果您想使用aws-sdk-js,则API中没有同步方法,幸运的是,许多人都已经实现了此功能。

例如node-s3-client具有这样的功能

var params = {
  localDir: "some/local/dir",
  deleteRemoved: true, // default false, whether to remove s3 objects
                       // that have no corresponding local file.

  s3Params: {
    Bucket: "s3 bucket name",
    Prefix: "some/remote/dir/",
    // other options supported by putObject, except Body and ContentLength.
    // See: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property
  },
};
var uploader = client.uploadDir(params);
uploader.on('error', function(err) {
  console.error("unable to sync:", err.stack);
});
uploader.on('progress', function() {
  console.log("progress", uploader.progressAmount, uploader.progressTotal);
});
uploader.on('end', function() {
  console.log("done uploading");
});

10-05 23:21
查看更多