如何使用适用于Node.js的AWS开发工具包将Amazon S3中的所有对象从一个前缀复制/移动到另一个

优素福:

如何将所有对象从一个前缀复制到另一个?我尝试了所有可能的方法来将一个镜头中的所有对象从一个前缀复制到另一个,但是似乎可行的唯一方法是遍历对象列表并逐个复制它们。这确实是低效的。如果一个文件夹中有数百个文件,是否需要拨打100个电话?

var params = {
         Bucket: bucket,
         CopySource: bucket+'/'+oldDirName+'/filename.txt',
         Key: newDirName+'/filename.txt',
 };
s3.copyObject(params, function(err, data) {
  if (err) {
      callback.apply(this, [{
          type: "error",
          message: "Error while renaming Directory",
          data: err
      }]);
  } else {
      callback.apply(this, [{
          type: "success",
          message: "Directory renamed successfully",
          data: data
      }]);
  }
});
Aditya Manohar:

您将需要创建一个AWS.S3.listObjects()列表以列出具有特定前缀的对象。但是您是正确的,因为您需要对要从一个存储桶/前缀复制到相同或另一个存储桶/前缀的每个对象进行一次调用。

您还可以使用异步工具之类的实用程序库来管理您的请求。

var AWS = require('aws-sdk');
var async = require('async');
var bucketName = 'foo';
var oldPrefix = 'abc/';
var newPrefix = 'xyz/';
var s3 = new AWS.S3({params: {Bucket: bucketName}, region: 'us-west-2'});

var done = function(err, data) {
  if (err) console.log(err);
  else console.log(data);
};

s3.listObjects({Prefix: oldPrefix}, function(err, data) {
  if (data.Contents.length) {
    async.each(data.Contents, function(file, cb) {
      var params = {
        Bucket: bucketName,
        CopySource: bucketName + '/' + file.Key,
        Key: file.Key.replace(oldPrefix, newPrefix)
      };
      s3.copyObject(params, function(copyErr, copyData){
        if (copyErr) {
          console.log(copyErr);
        }
        else {
          console.log('Copied: ', params.Key);
          cb();
        }
      });
    }, done);
  }
});

希望这可以帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用适用于Node.js的AWS开发工具包将二进制文件上传到S3

使用适用于Node.js的AWS开发工具包,如何等待EC2实例添加到ECS集群中?

在ECS中运行时,适用于node.js的AWS开发工具包未获取凭证

使用适用于Node.js的AWS开发工具包有什么方法可以检查S3存储桶中路径的存在吗?

适用于s3的AWS开发工具包v2

AWS XRay 与适用于 NodeJS 的 AWS 开发工具包 v3

适用于 PHP 的 AWS S3 开发工具包:如何从其 URL 获取对象键?

如何使用 AWS CLI 根据创建时间将 s3 对象从一个存储桶移动到另一个存储桶

将AWS开发工具包与Web Worker一起使用

使用适用于节点的AWS开发工具包将S3资源设为只读公共状态吗?

使用适用于Java的AWS开发工具包从AWS服务器获取现有密钥对

如何将AWS开发工具包加载到CakePHP中?

使用适用于PHP 2的AWS开发工具包生成预签名的对象网址

Windows 10不能通过Composer使用适用于PHP v3的AWS开发工具包

使用AWS Lambda将文件从一个s3存储桶移动到AWS中的另一个存储桶

尝试使用 node.js 和 exec + aws cli 将所有文件从一个 S3 存储桶移动到另一个存储桶

适用于S3的AWS开发工具包中的TransferManager是否正在执行异步I / O?

Android-“无法解析主机”-如何从Amazon AWS开发工具包示例配置S3_UploaderActvity?

适用于PHP的AWS开发工具包,如何使用服务员来等待所有资源的完成?

如何使用适用于PHP的AWS开发工具包通过具有专用IP的SES发送电子邮件?

如何使用适用于S3的AWS开发工具包修复JavaScript承诺?

使用AWS开发工具包将文件上传到.NET Core中的S3

如何将文件从一个S3客户端移动到另一个S3客户端

适用于PHP v3的AWS开发工具包中是否具有与NoSuchKeyException等效的功能?

通过适用于 Java 的 AWS 开发工具包使用 Amazon SES

使用适用于Java的AWS开发工具包上传对象

[Node JS AWS开发工具包]假设IAM角色,上载到S3时缺少凭据

在AWS S3中使用AWS开发工具包(NodeJS)创建一个空文件夹

适用于.NET的AWS开发工具包-IAmazonS3不包含'PutObject'的定义