当前位置: 首页 > 面试题库 >

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

谢灵均
2023-03-14
问题内容

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

问题答案:

您将需要创建一个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);
  }
});

希望这可以帮助!



 类似资料:
  • 问题内容: 在Python中,是否有一个库方法可在同一类的两个(已经存在)实例之间复制所有属性? 我的意思是,类似Apache Commons的东西 问题答案: 如果您的班级未修改或出于特殊属性访问目的,则所有属性都存储在其中,因此您可以执行以下操作: 如果使用python属性,则应查看并筛选出要复制的属性。

  • 我在pom中有获取依赖项的代码。像这样的xml 这个工件来自一个自定义的远程maven存储库。我们试图将这个group pId“第三方”下的所有工件移动到JFrog工件工厂。我该如何实现呢?

  • 我们最近发现需要将每个秘密(名称和值)从一个Azure KeyVault复制到新创建的一个。我找到了从备份中恢复秘密的方法,但我们没有备份。是否有一个Powershell脚本可以循环访问源存储库中的每个名称/值组合,并将其复制到目标存储库?

  • 假设我们有一个这样定义的对象A: 出于某种原因,我需要创建第二个对象B,它只具有对象A的前两个属性: 所以我的问题是:将对象A复制到对象B的最佳方法是什么?我一直在逐个复制获取者和设置者的属性,但有些事情告诉我一定有更好的方法来做到这一点!特别是当对象将具有很多属性时,我必须编写一行又一行的代码,只是为了将它们全部复制到第二个对象B... 多谢了:) 编辑:我一直被一个“另一个问题的可能重复”提醒

  • 我有两个java类如下 现在我有了一个A级对象Aobj,两个字段都已初始化。我用的是小豆子。copyProperties(Bobj,Aobj),但只有字段值被复制到Bobj中。名称列表为空。有没有办法深度复制一个对象,以便它复制所有字段,包括列表、地图等集合。 我在某个地方听说了推土机,不确定这是否是为了这个目的。

  • 问题内容: 如何使用Intent类的方法将自定义类型的对象从一个传递到另一个? 问题答案: 如果您只是传递对象,那么Parcelable就是为此而设计的。与使用Java的本机序列化相比,使用它需要付出更多的努力,但是它的速度更快(我的意思是,WAY更快)。 在文档中,有关如何实现的一个简单示例是: 请注意,如果要从给定的宗地中检索多个字段,则必须按照将其放入的相同顺序(即,采用FIFO方法)进行操